Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode swapPairs(ListNode head) { if (head==null||head.next==null) { return head; } ListNode pre,p; ListNode pHeadNext = head.next,pHead = head; //特殊处理前两个元素 if (pHeadNext.next == null) { //只有2个元素 pHeadNext.next = pHead; pHead.next = null; return pHeadNext; } else { pHead.next = pHeadNext.next; pHeadNext.next = pHead; //重新设置p pre p = pHead.next; pre = pHead; } while (p!=null&&p.next!=null) { ListNode pNext = p.next; pre.next = pNext; ListNode temp = pNext.next; pNext.next = p; p.next = temp; //重新设置p pre pre = p; p = pre.next; } return pHeadNext; } }