给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4
, 你应该返回的链表是 2->1->4->3
。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
/**
* @param head a ListNode
* @return a ListNode
*/
public ListNode swapPairs(ListNode head) {
// Write your code here
if(head==null||head.next==null){
return head;
}
ListNode dummy=new ListNode(-1);
dummy.next=head;
ListNode pivot=dummy;
ListNode tail=dummy;
pivot=pivot.next;
while(pivot!=null){
ListNode temp=pivot.next;
if(pivot.next==null){
break;
}
pivot.next=pivot.next.next;
temp.next=null;
temp.next=pivot;
tail.next=temp;
tail=tail.next.next;
pivot=pivot.next;
}
return dummy.next;
}
}