給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換後的鏈表。
示例:
給定 1->2->3->4 你應該返回 2->1->4->3
說明:
- 你的算法只能使用常數的額外空間。
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
這類題其實畫到紙上就很簡單明瞭了,只是在腦子裏摸你的時候很容易腦抽出錯orz
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null||head.next==null)return head;
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode left=dummy;
ListNode mid=head;
ListNode right=head.next;
while(mid!=null&&mid.next!=null){
mid.next=right.next;
right.next=mid;
left.next=right;
left=mid;
mid=left.next;
if(mid!=null)
right=mid.next;
}
return dummy.next;
}
}
今天又是做水題的一天(劃