Swap Nodes in Pairs
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.
这道题如果直接交换值是很easy的
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public ListNode swapPairs(ListNode head) { 14 if(null == head || null == head.next) 15 return head; 16 ListNode front = head; 17 ListNode behind = front.next; 18 19 do{ 20 int temp = front.val; 21 front.val = behind.val; 22 behind.val = temp; 23 if(null == behind.next || null == behind.next.next) 24 break; 25 front = behind.next; 26 behind = front.next; 27 }while(true); 28 29 return head; 30 } 31 }
按照题目要求不交换值,交换节点的引用
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { 7 * val = x; 8 * next = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 public ListNode swapPairs(ListNode head) { 14 if(null == head || null == head.next) 15 return head; 16 ListNode behind = head; 17 ListNode front = behind.next; 18 ListNode temp; 19 ListNode pre; 20 //交换开头两个节点 21 22 behind.next = front.next; 23 front.next = behind; 24 25 head = front; 26 //交换一下front和behind 27 temp = behind; 28 behind = front; 29 front = temp; 30 31 pre = front;//倒数第二个指针 32 33 while(null != front.next && null != front.next.next){ 34 behind = front.next; 35 front = behind.next; 36 37 behind.next = front.next; 38 front.next = behind; 39 40 temp = behind; 41 behind = front; 42 front = temp; 43 44 pre.next = behind; 45 pre = front; 46 } 47 48 return head; 49 } 50 }
Please call me JiangYouDang!