如图1所示,要求交换相邻的两个节点。
图1
创建虚拟节点,dummy、first、second。
dummy:代表相邻的两个节点的虚拟头结点
first:指向第一个交换的节点
second:指向第二个交换的节点
以此规律,多次迭代即可。
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) return head;
ListNode res = head.next; // 结果的头结点
ListNode first = head; // 指向交换的第一个节点
ListNode second = head.next; // 指向交换的第二个节点
// 交换两个节点
first.next = second.next;
second.next = first;
ListNode dummyHead = first;
while (first.next != null && first.next.next != null){
dummyHead = first; // 变换虚拟头结点
first = first.next; // 下一次迭代的第一个节点
second = first.next; // 下一次迭代的第二个节点
// 交换两个节点
first.next = second.next;
second.next = first;
dummyHead.next = second;
}
return res;
}
}