链表虚拟头结点的设置 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语言:数组排序(冒泡法排序)