我有这个代码,我从头开始输入5个随机元素1,3,5,7,9然后我想显示我的链表(1,3,5,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;
}
答案 0 :(得分:1)
执行此操作的一种方法是使用递归。使用调用堆栈来跟踪每个节点,您将继续遍历列表。一旦到达最后,则打印并结束该功能。然后,这将传播回调用堆栈,打印下一个元素,直到开始。
void print_revers(node* n)
{
if (n)
print_reverse(n->next)
std::cout << n->data << std::endl;
}
此示例假定列表中next
指向NULL
或nullptr
答案 1 :(得分: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;
}
}
它应该以这种方式工作。