【发布时间】:2011-08-31 19:05:28
【问题描述】:
这是一段尝试构建链表的代码。
struct node {
char name[20];
int age;
int height;
node* next; // Pointer to the next node
};
node* startPTR = NULL;
void addNode_AT_END() {
node *temp1;
node *temp2;
temp1 = new node;
cout << "Enter the name : ";
cin >> temp1->name;
cout << endl << "Enter the age : ";
cin >> temp1->age;
cout << endl << "Enter height : ";
cin >> temp1->height;
temp1->next = NULL;
if( startPTR == NULL) {
startPTR = temp1;
} else {
temp2 = startPTR;
while( temp2->next != NULL )
temp2 = temp2->next;
temp2->next = temp1;
}
}
以下是对上述函数的 2 次背靠背调用后的示意图。
start = addr1;
|
V
(addr1) ----> (addr2) ----> (NULL) at end
^
|
temp2
其中addr1和addr2分别是第一个和第二个节点的地址。
第三次通话后会发生什么?第三次调用的迭代将如何进行?我无法理解list 在第二次调用后如何链接。据我所知,所有已经建立起来的东西都会消失。那么将如何列出走得更远?第三次调用时节点如何放置?
【问题讨论】:
-
什么?发布的代码是一个非常典型的链表实现。令人困惑的第三个电话的具体内容是什么?
-
@Chad 在第三次调用中迭代将如何进行?
-
查看下面的正确答案。
-
我发现找出指针的最佳方法是拿出铅笔和纸(还记得吗?它们在上个世纪非常流行)。然后逐行浏览代码并画出发生了什么。
标签: c++ list pointers linked-list