显示链接列表时颠倒顺序
Reverse order while displaying linked list
我有这个代码,我从一开始就输入了5个随机元素1,3,5,7,9,然后我想显示我的链表(1,3,5,7,7,9),但由于一些奇怪的原因(9,7,5,3.1),它的顺序相反。你能指出问题吗?
#include <iostream> using namespace std;
struct node {
int data;
node * next; };
int n;
int main() {
// input.
cout << "please input 5 elements:n";
node * head = NULL;
for (int i = 0; i < 5; i++) {
cin >> n;
node * curr = new node;
curr -> data = n;
curr -> next = head;
head = curr;
}
// display
while (head) {
cout << head -> data << "n";
head = head -> next;
}
return 0;
}
实现这一点的一种方法是递归。使用调用堆栈来跟踪每个节点,您将继续遍历列表。到达末尾后,即可打印并结束函数。然后,这将向上传播到调用堆栈,将下一个元素打印回起点。
void print_revers(node* n)
{
if (n)
print_reverse(n->next)
std::cout << n->data << std::endl;
}
此示例假设列表中next
指向NULL
或nullptr
的最后一个节点
输入数据的每一步后,您的列表都是这样的:
- 1
- 3->1
- 5->3->1
- 7->5->3->1
- 9->7->5->3->1
如果您想要列表(1、3、5、7、9),则需要将每个元素插入列表的末尾,而不是开头。因此,您需要有一个指向末尾的指针(我认为它被称为尾部)来按您想要的顺序放置元素。代码如下所示:
node * head = NULL, * tail = NULL;
for (int i = 0; i < 5; i++) {
cin >> n;
node * curr = new node;
curr -> data = n;
curr -> next = NULL;
if(head == NULL) {
head = tail = curr;
}
else {
tail -> next = curr;
tail = tail -> next;
}
}
它应该这样工作。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- libavdevice 和 x11 的静态链接库应该以什么顺序链接?
- 链接库时的默认目录上的GCC或G 路径搜索顺序
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- 双链表中按字母顺序排序的链接
- 为什么更改链接顺序可以修复一个系统上的一些链接错误?
- 链接列表并按字母顺序插入字符串
- 队列顺序中的链接列表
- AC_LANG_PROGRAM由于链接器选项的顺序失败了链接阶段
- 我如何附加双链接以指向正确的节点,以相反的顺序打印
- 如何更改静态链接库中常量字符串数组的Visual Studio C++初始化顺序
- 对同一对象进行评估的链接操作和顺序
- 链接列表:在C++中按物理和逻辑顺序显示列表
- 更改参数的顺序可解决链接器错误
- 如何确定最快的链接顺序
- 通过Microsoft Visual Studio 2010 IDE 进行精确的库链接顺序控制
- 方法链接中的C++执行顺序
- 没有调用C++析构函数,具体取决于链接顺序
- CMake和共享库的顺序相关链接
- 不同库中的相同符号和链接顺序