24. 两两交换链表中的节点 - 力扣(LeetCode) (leetcode-cn.com)
为了让思路更清晰一点,我把交换两个Node单独写成了方法,需要的时候直接调用。需要注意 i 和 j 交换完之后下一次循环i,j的赋值。
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null)
return null;
ListNode HEAD = new ListNode(0,head);
ListNode pre = HEAD;
ListNode i = head;
ListNode j = head.next;
while (true){
if(j==null)
break;
swapNode(pre,i,j);
pre = i;
i = i.next;
if(i==null)
break;
j = i.next;
}
return HEAD.next;
}
void swapNode(ListNode pre,ListNode i,ListNode j){
pre.next = j;
i.next = j.next;
j.next = i;
}
}