这是我在C ++中实现列表的程序。并希望打印其中的第一个元素。 我写元素直到我达到0
你能告诉我这样做的方法吗?感谢
#include "stdafx.h"
#include "iostream"
using namespace std;
struct Node {
int data;
Node *next;
};
int main()
{
Node *first = 0;
Node *p;
cout << "Enter a list" << endl;
int i;
while (true) {
cin >> i;
if (i == 0) break;
p = new Node;
p -> data = i;
p -> next = first ;
first = p;
}
cout << "List: ";
p = first;
while (p) {
cout << p -> data;
p = p -> next;
}
cout << endl;
return 0;
}
答案 0 :(得分:2)
您的程序在保留列表的初始元素时遇到问题:您将 last 元素分配给名为first
的变量的代码,因此您的第二个循环将以一旦它开始。
您需要更改分配first
的逻辑:例如,不是无条件地分配它,您只能在0
时分配它:
if (first == 0) {
first = p;
}
除了修复此问题外,您还应添加代码以释放使用new
分配的对象。使用delete
释放列表中的节点。这可以用与第二个循环相同的方式完成:
p = first;
while (p) {
Node* tmp = p;
p = p -> next;
delete tmp;
}
答案 1 :(得分:1)
您创建的是堆栈(LIFO)。您正在向其顶部添加新元素,因此当您遍历数据结构时,first
实际上指向最后添加的元素。
因此,您可以遍历它直到元素的next
为NULL - 这是您实际的第一个元素。
或者您可以更改程序以使用不同的数据结构,在这里您可以向尾部添加元素,而不是向头部添加元素,或者在指向第一个元素的位置添加元素。
答案 2 :(得分:0)
只需访问您的链接列表,直到您点击下一个指针为0的节点。 这是第一个节点。打印它的价值,你就完成了。 在最后一个节点上保留一个指针,以便能够遍历链表。 如果你经常需要第一个节点,请为它保留一个额外的指针。