题目:24. 两两交换链表中的节点
如果您已经有思路了,或者是N刷了,可以先自己写一遍。
题目分析
注意,这个题目也是针对单向链表操作的。两两交换链表中的节点要求在链表上进行节点位置的交换,而不仅仅是交换节点的值。
这里可以使用迭代法来实现。
解题思路
迭代方法的核心思想是遍历链表,每次跳过两个节点,并在遍历过程中交换每对相邻的节点。
- 创建一个哨兵节点:这个哨兵节点指向链表的头节点,便于处理头节点的交换操作,同时作为返回值的参考。
- 初始化指针:使用指针
prev
初始化为哨兵节点,逐个遍历节点。
- 遍历并交换节点:在链表上移动指针,每次处理prev和后面两个节点的指针指向,进行节点的交换操作,最后把prev节点指向下一个节点继续处理。
Java解法
下面是使用Java语言的解法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
class Solution { public ListNode swapPairs(ListNode head) { ListNode dump = new ListNode(); dump.next = head; ListNode prev = dump; while (prev.next != null && prev.next.next != null) { ListNode n1 = prev.next; ListNode n2 = prev.next.next; prev.next = n2; n1.next = n2.next; n2.next = start; prev = start; } return dump.next; } }
|
注意,这里修改三个指针方向比较容易出错,脑海里一定要有这样的图,做题的时候可以画出来:
References