LeetCode OJ: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.

如题实例所示,需要成对的交换节点,这里我用到了两个帮助节点,一个记下起点的前面位置,一个作为每一对prev的前面一个节点使用,思路比较简单,就是交换之后再向后面移动两个节点就可以了,代码如下所示:

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* swapPairs(ListNode* head) {
12         if(!head) return NULL;
13         if(!head->next) return head;
14           ListNode * helper1 = new ListNode(INT_MIN);
15           ListNode * helper2 = new ListNode(INT_MIN);
16           helper1->next = head;
17           helper2->next = head->next;// 先记录下首节点的位置,供函数返回的时候使用
18           ListNode * prev = head;
19           ListNode * curr = head->next;
20           while(prev){
21               if(curr){
22                   ListNode * tmpNode = curr->next;
23                   curr->next = prev;
24                   helper1->next = curr;
25                   prev->next = tmpNode;
26                   helper1 = prev;
27                   if(prev->next && prev->next->next){
28                       prev = prev->next;
29                       curr = prev->next;
30                   }else
31                       break;
32               }else
33                   break;
34               
35           }      
36           return helper2->next;
37     }
38 };
原文地址:https://www.cnblogs.com/-wang-cheng/p/5005199.html