Swap Nodes in Pairs leetcode java

愛做飯的小瑩子發表於2014-07-23

題目:

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.http://i.cnblogs.com/EditPosts.aspx?opt=1

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

 

題解:

這道題考察了基本的連結串列操作,注意當改變指標連線時,要用一個臨時指標指向原來的next值,否則連結串列丟鏈,無法找到下一個值。

本題的解題方法是:

需要運用fakehead來指向原指標頭,防止丟鏈,用兩個指標,ptr1始終指向需要交換的pair的前面一個node,ptr2始終指向需要交換的pair的第一個node。

 然後就是進行連結串列交換。

需要用一個臨時指標nextstart, 指向下一個需要交換的pair的第一個node,保證下一次交換的正確進行。

然後就進行正常的連結串列交換,和指標挪動就好。

 當連結串列長度為奇數時,ptr2.next可能為null;

 當連結串列長度為偶數時,ptr2可能為null。

所以把這兩個情況作為終止條件,在while判斷就好,最後返回fakehead.next。

程式碼如下:

 1   public ListNode swapPairs(ListNode head) {
 2       if(head == null || head.next == null)
 3         return head;
 4     
 5       ListNode fakehead = new ListNode(-1);
 6       fakehead.next = head;
 7       
 8       ListNode ptr1 = fakehead;
 9       ListNode ptr2 = head;
10       
11       while(ptr2!=null && ptr2.next!=null){
12           ListNode nextstart = ptr2.next.next;
13           ptr2.next.next = ptr2;
14           ptr1.next = ptr2.next;
15           ptr2.next = nextstart;
16           ptr1 = ptr2;
17           ptr2 = ptr2.next;
18       }
19     return fakehead.next;
20   }

 Reference://http://gongxuns.blogspot.com/2012/12/leetcodeswap-nodes-in-pairs.html

相關文章