Leetcode T24 :两两交换链表中的节点,这样的思路为什么会出错?
/**
* 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)
return null;
ListNode pre = head;
ListNode cur = head.next;
ListNode save;
while(pre != null && cur != null) {
save = cur.next;
cur = pre;
pre = save;
if(save == null || save.next == null)
break;
pre = save;
cur = save.next;
}
return head;
}
}
怎么个两两交换法?相邻两个交换?
save = cur.next;
cur = pre;
pre = save;
这样交换显然没用,因为链表关系重点在于next的指向,指向没变,你这交换就没有作用
save = cur.next;
cur.next = pre;
pre.next = save;
如果你这head是个有值的头结点,那你还需要特殊判断一下。当第一次交换时,要将head = cur加到交换之前