【链表】24. 两两交换链表中的节点

题目:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

 

解答:

 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 (NULL == head || NULL == head->next)
13         {
14             return head;
15         }
16 
17         ListNode *ppre = NULL;
18         ListNode *prev = head;
19         ListNode *curr = head->next;
20 
21         while (curr)
22         {
23             // left at least 2 node
24             prev->next = curr->next;
25             curr->next = prev;
26             if (ppre)
27             {
28                 ppre->next = curr;
29             }
30             else
31             {
32                 head = curr;
33             }
34 
35             ppre = prev;
36             prev = prev->next;
37             if (prev)
38             {
39                 curr = prev->next; // left at least 1 node
40             }
41             else
42             {
43                 curr = NULL; // none left
44             }
45         }
46 
47         return head;   
48     }
49 };

 

posted @ 2020-05-01 17:45  梦醒潇湘  阅读(109)  评论(0)    收藏  举报