最近在做链表的题目的时候,对于所定义的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 =cur->next->next效果如下图:
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是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等等赋值可能会改变链表排布