链表在c++中从最后到第一显示
linked-list display last to first in c++
今天好。。。我想制作一个链表,用c++从最后到第一显示列表如ii加29->36->15->1我想成为1->15->36->29这样我做了通常的一个
void DisplayNormal()
{
linkedlist *temp;
temp = head;
while (temp->next != NULL)
{
cout << "list Number : " << temp->ListNum << endl;
cout << "Student Ceel Phone : " << temp->number << endl;
cout << "-------------------------------" << endl;
temp = temp->next;
}
if (temp->next == NULL)
{
cout << "list Number : " << temp->ListNum << endl;
cout << "Student Ceel Phone : " << temp->number << endl;
cout << "-------------------------------" << endl;
}
}
理解你的问题有点困难。您的意思是,如果数据在链表中是29->36->15->1,则将其显示为1->15->36->29,或者如果数据按规则顺序给定29、36、15、1,您想使链表1->15->36->29吗?
我想你想要第一个。所以我建议使用递归函数。
typedef struct linkedlist linkedlist;
struct linkedlist{
int data;
struct linkedlist* next;
};
void displayReversed(linkedlist* current ) {
if( current == NULL ) return;
displayReversed(current->next);
cout << current->data << endl;
}
我认为,最好的方法是在之前和显示之后反向链表,因为我们改变了原始链表的方向,而不是它的副本。您可以在O(n)中反向链表,显示O(n)中的所有元素,这就是为什么算法的最终时间复杂度是O(n。
class Node
{
Node *next;
int val;
};
有了我的这个链表表示,你可以这样做:
Node* reverseLinkedList(Node *head)
{
Node *prev = NULL;
Node *current = head;
Node *next;
while (current) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
}
你的完整功能是:
void DisplayReversed(Node *head)
{
reverseLinkedList(head);
displayNormal(*head);
reverseLinkedList(head);
}
相关文章:
- 仅显示链表的最后一个元素
- 在 QListView 中显示最后一个元素
- 螺旋矩阵在最后一个"for"循环中中断,不显示任何内容
- 程序应该显示文件的最后5行,但它不适用于大文件
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- 数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?
- window.display() 单独在显示的最后一个缓冲区和当前缓冲区之间切换
- 在 for 循环中仅显示序列的最后一个结果
- 为什么以下代码在阵列中显示上个月的最后一个月,而不是显示降雨量最高和最低降雨量的月份
- 快速报告 - 在显示准备报告之前或之后清除最后报告
- C++计算器显示,最后额外显示 0
- 如何使用C Win32 API在登录对话框中显示最后一个登录用户名
- C ++流文件仅显示while循环后的最后一行
- 最后一个函数未显示正确的输出
- 如何从数据库(postgre)获取最后一个值并在Qt中显示它
- 链表在c++中从最后到第一显示
- c++,如何修复最后一节显示两次
- 希望我的代码逐行将矩阵元素转换为向量,它只将矩阵的最后一行显示为向量
- 无法显示 for 循环后的最后一个数字
- 我的字符数组只显示最后几个字符.c++