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.
第一遍:
1 public class Solution { 2 public ListNode swapPairs(ListNode head) { 3 // Note: The Solution object is instantiated only once and is reused by each test case. 4 if(head == null || head.next == null) return head; 5 ListNode header = new ListNode(-1), first = head, second = head.next, cur = header; 6 header. next = head; 7 while(second != null){ 8 first.next = second.next; 9 second.next = first; 10 cur.next = second; 11 cur = first; 12 first = cur.next; 13 if(first != null) 14 second = first.next; 15 else 16 second = null; 17 } 18 return header.next; 19 } 20 }
第三遍:
1 public class Solution { 2 public ListNode swapPairs(ListNode head) { 3 ListNode header = new ListNode(-1); 4 header.next = head; 5 ListNode cur = header; 6 while(cur.next != null && cur.next.next != null){ 7 ListNode first = cur.next.next, second = cur.next; 8 second.next = first.next; 9 cur.next = first; 10 first.next = second; 11 cur = second; 12 } 13 return header.next; 14 } 15 }