链表虚拟头结点的设置 LeetCode_24
LeetCode_24 两两交换链表中的节点 因为头结点会发生变化,返回时找到头结点是关键。这就可以引入虚拟头结点: 设置 Node dummyNode 指向当前头结点,再令一个preNode = dummyNode。
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode pre = dummy;
while(pre.next != null && pre.next.next != null){
ListNode temp = head.next.next;
pre.next = head.next; //由于pre与dummy指向同一个节点,此时pre.next指向最后修改后的头结点。同时dummy.next也就指向最后的头结点
head.next.next = head;
head.next = temp;
pre = head; //此时pre就与dummy无关了
head = head.next;
}
return dummy.next; //注意dummy.next 才是头结点
}
这道题一定要画图,可以把逻辑理顺!!图源@代码随想录 关于虚拟头结点还可以看LeetCode_0203进行实践。
下一篇:
C语言:数组排序(冒泡法排序)
