24.两两交换链表中的节点
这个题主要就是搞清楚每一轮需要调换的指向顺序以及设置的cur和pre都代表什么,设置了dummy head之后,这个步骤一到三就在所有的node上面成立了,每一轮都是在调换相邻两个node的位置。
注意要提前设置好dummy.next = head. 前面几个链表题不需要链接dummy和head是因为不需要默认链接而是后续会设好pre.next是cur,但是这个题必须提前设置好next之后,进while循环就直接开始调换顺序了!
调换的顺序是从步骤三开始的,原因也是因为为了避免值被其他操作覆盖。最后别忘了pre和cur同时挪指针。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) return head;
ListNode dummy = new ListNode(0);
dummy.next= head;
ListNode pre = dummy,cur = head;
while(cur != null && cur.next != null){
ListNode temp = cur.next;
cur.next = temp.next;
temp.next = pre.next;
pre.next = temp;
pre = cur;
cur = temp;
}
return dummy.next;
}
}