首页 > 代码库 > Swap Nodes in Pairs

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和behind27         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 }

 

 

Swap Nodes in Pairs