标签:
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.
Iterative Vestion:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode swapPairs(ListNode head) { 11 if (head == null || head.next == null) { 12 return head; 13 } 14 ListNode dummy = new ListNode(0); 15 dummy.next = head; 16 head = dummy; 17 while (head.next != null && head.next.next != null) { 18 ListNode n1 = head.next; 19 ListNode n2 = head.next.next; 20 n1.next = n2.next; 21 head.next = n2; 22 n2.next = n1; 23 head = n1; 24 } 25 return dummy.next; 26 27 } 28 }
Recursive Version
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode swapPairs(ListNode head) { 11 if (head == null || head.next == null) { 12 return head; 13 } 14 ListNode tail = swapPairs(head.next.next); 15 ListNode temp = head.next; 16 head.next = tail; 17 temp.next = head; 18 return temp; 19 20 } 21 }
标签:
原文地址:http://www.cnblogs.com/FLAGyuri/p/5769544.html