【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别

最近在做链表的题目的时候,对于所定义的cur链表指针产生了一些疑惑,查阅资料后整理一下我的理解:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
	ListNode *dummyHead = new ListNode(0);
	dummyHead->next = head;
	ListNode *cur = dummyHead;

首先要清楚的是,cur是一个指针,而不是链表的一个节点,对于链表[1,2,3,4],上面代码定义的头节点和cur指针的效果如下图:
【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别_第1张图片
此时cur =cur->next->next效果如下图:
【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别_第2张图片
cur存放head节点的地址;
cur->next是head节点的next指针域存放的节点1的地址;
cur->next->next是1节点的next指针域存放的节点2的地址;
所以cur =cur->next->next是把节点2的地址赋值给cur指针;
而cur->next = cur->next->next->next的效果如下图(相对于第一张图):
【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别_第3张图片
cur->next是head节点的next指针域存放的节点1的地址;
cur->next->next->next是2节点的next指针域存放的节点3的地址;
所以cur->next =cur->next->next->next是把节点3的地址赋值给cur所指向的head节点的next指针域;

总结

对cur赋值不会改变原本的链表排布,对cur->next或cur->next->next等等赋值可能会改变链表排布

【理解链表指针赋值】链表中cur->next = cur->next->next->next与cur =cur->next->next的区别_第4张图片

你可能感兴趣的:(链表,数据结构,c++)