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.

Solution:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode h = new ListNode(0);
        ListNode rt = h;
        h.next = head;

        do{
            h = swap(h);
        }while(h != null);
        return rt.next;
    }
    private ListNode swap(ListNode i){
        if(i == null) return null;
        if(i.next == null) return null;
        if(i.next.next == null) return null;
        ListNode left, right, rt;
        left = i.next;
        right = left.next;
        rt = right.next;
        i.next = right;
        right.next = left;
        left.next = rt;
        return left;
    }
}

results matching ""

    No results matching ""