我在将C ++放入并显示到链表中时遇到了麻烦。我对链接列表有很多麻烦
这是我的代码。它只显示第一个数字。 (应显示19 21 17 22 33)
#include <iostream>
using namespace std;
struct node {
int age;
node *next;
};
void display(node *t)
{
node *temp = t;
cout << temp->age << " ";
}
int main()
{
int Age[5] = { 19, 21, 17, 22, 33 };
node* List = new node;
List = NULL;
node* temp2 = List;
while (temp2 != NULL)
{
temp2 = temp2->next;
node* List = new node;
List = NULL;
node* temp2 = List;
}
for (int i = 0; i < 5; i++)
{
temp2 = new node;
temp2 -> age = Age[i];
temp2 -> next = NULL;
if (List == NULL)
List = temp2;
}
display(List);
system("PAUSE");
return 0;
}
答案 0 :(得分:0)
这里有很多事情要发生。我建议您查看一些教程,以帮助巩固您对指针和链接列表的理解。
要回答您的问题,请让我们逐步了解正在发生的事情:
在main
函数中,您动态分配node
对象,并List
指向此对象。然后,您将List
设置为NULL
。将node
指针temp2
初始化为List
时,temp2
也会指向NULL
。
由于temp2 = NULL
,您可以跳过以下while
循环。
在for
循环的第一次迭代中,您将temp2
重新分配给新创建的对象,然后将age
的{{1}}设置为node
1}}。当我们到达Age[0]
语句if
时,我们输入条件语句并将List = NULL
设置为List
temp2
。
对于temp2->age = Age[0]
循环的每次额外迭代,for
不再等于List
,因此您再也不会输入NULL
语句。 if
仍指向List
node
。
当你进入你的显示功能时,假设它被写入循环链表,你的age = Age[0]
指针是一个列表,其中一个节点List
。假设您的链接列表包含多个有效节点,则age = 19
函数不会迭代它们。
答案 1 :(得分:0)
以下面的代码为例。请注意,您必须在程序结束时删除所有已创建的节点,以避免内存泄漏。
#include <iostream>
#include <cstddef>
using namespace std;
struct node {
int age;
node* next;
};
void display(node* list) {
while (list != NULL) {
cout << list->age << ' ';
list = list->next;
}
}
node* create(int age) {
node* t = new node;
t->age = age;
t->next = NULL;
return t;
}
void add(node* list, node* t) {
while (list->next != NULL) {
list = list->next;
}
list->next = t;
}
void release(node* list) {
while (list != NULL) {
node* t = list;
list = list->next;
delete t;
}
}
int main() {
int arr[5] = { 19, 21, 17, 22, 33 };
node* list = create(arr[0]);
for (int i = 1; i < 5; i++) {
node* t = create(arr[i]);
add(list, t);
}
display(list);
release(list);
system("PAUSE");
return 0;
}