Sunday, September 15, 2013

Swap Nodes in Pairs

Q:
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.

A:

 就是用两个指针,每次指两个。-----recursive


public class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode header = new ListNode(0);
        header.next = head;
        helper(header);
        return header.next;
    }
    private void helper(ListNode header){
        if(header.next == null || header.next.next == null)
            return;
        ListNode n1 = header.next;
        ListNode n2 = n1.next;
        ListNode newHead = n2.next;
        header.next = n2;
        n2.next = n1;
        n1.next = newHead;
        helper(n1);
    }
}
---------------- 3 rd  pass---------- same as above-----but iterative



public class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode header = new ListNode(0);
        ListNode tail = header;
        ListNode p1,p2;
        while(head != null){
            p1 = head;
            head = head.next;
            if(head!=null){
                p2=head;
                head = head.next;
                tail.next = p2;
                tail = tail.next;
            }
            tail.next = p1;
            tail = tail.next;
            tail.next = null;
        }
        return header.next;
    }
}

忘记了把tail的next指向null。

No comments:

Post a Comment