2014年9月29日星期一

[Leetcode] 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.
比较简单的链表题,主要考察的是链表翻转,但是是翻转的最简单情况。使用一个dummy节点可以比较方便的管理链表头,在处理链表的尾部的时候,由于我使用了双指针操作,所以尤其要注意到达尾部的时候节点为空或者只有一个节点的情况,这些情况可以看做是corner case和在程序一开始就进行判断的情况一样。
public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode tail = dummy, temp1 = head, temp2 = head.next;
        
        while(temp1 != null) {
            tail.next = temp2;
            temp1.next = temp2.next;
            temp2.next = temp1;
            tail = temp1;
            temp1 = temp1.next;
            if(temp1 == null || temp1.next == null) break;
            temp2 = temp1.next;
        }
        
        return dummy.next;
    }

没有评论:

发表评论