给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 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;
}
}
今天又是做水题的一天(划