如何解决last->next = temp 如何工作?
这是 udemy 教程中用于显示链表的代码,我们将获取一个数组并将这些值存储在链表中。我不明白代码是如何工作的。在下面的代码中,我们存储下一个节点的地址 how last->next=temp;在我没有创建像 last=new node 这样的最后一个节点的地方工作;我只创建了最后一个指针。我不明白,有人可以向我解释它是如何工作的
#include <iostream>
using namespace std;
class Node{
public:
int data;
Node* next;
};
int main() {
int A[] = {3,5,7,10,15};
Node* head = new Node;
Node* temp;
Node* last;
head->data = A[0];
head->next = nullptr;
last = head;
// Create a Linked List
for (int i=1; i<sizeof(A)/sizeof(A[0]); i++){
// Create a temporary Node
temp = new Node;
// Populate temporary Node
temp->data = A[i];
temp->next = nullptr;
// last's next is pointing to temp
last->next = temp;
last = temp;
}
// display Linked List
Node* p = head;
while (p != nullptr){
cout << p->data << " -> " << flush;
p = p->next;
}
return 0;
}
解决方法
找出指针的最好方法是用笔和纸画框和箭头。
这是发生了什么的(悲伤的)ASCII 再现:
head->data = A[0];
head->next = nullptr;
last = head;
head
指向新创建的节点,last
指向与 head
相同的位置:
head
|
v
+------+------+
| data | next |
| |(null)|
| | |
+------+------+
^
|
last
接下来,
// Create a temporary Node
temp = new Node;
// Populate temporary Node
temp->data = A[i];
temp->next = nullptr;
看起来像这样:
head temp
| |
v v
+------+------+ +------+------+
| data | next | | data | next |
| |(null)| | |(null)|
| | | | | |
+------+------+ +------+------+
^
|
last
然后
last->next = temp;
更改节点next
指向的last
成员(在第一次迭代中,这与head
指向的节点相同):
head temp
| |
v v
+------+------+ +------+------+
| data | next | | data | next |
| | ---------->| |(null)|
| | | | | |
+------+------+ +------+------+
^
|
last
最后,让 last
指向最近创建的节点:
last = temp;
给出
head temp
| |
v v
+------+------+ +------+------+
| data | next | | data | next |
| | ---------->| |(null)|
| | | | | |
+------+------+ +------+------+
^
|
last
然后从那里重复循环。
,您已经在 for 循环之前使用 last = head
将变量 last 初始化为 head。这样做是为了确保在将其他节点添加到列表时不会修改原始头部。在每次迭代中,最后一个节点用于跟踪链表中的最后一个节点,以便将每个新节点添加到链表的末尾。
在下面的代码中,我们存储下一个节点的地址 how last->next=temp;在我没有创建像 last=new node 这样的最后一个节点的地方工作;我只创建了最后一个指针。
last
始终只是一个指针。它开始等于 head
,它是指向第一个节点的指针。在您的循环中,您创建一个 temp
指向的新节点,然后将 next
当前指向的节点的 last
字段设置为 temp
,然后您更改 last
以便它现在指向同一个节点,即新的最后一个节点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。