24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given <code>1->2->3->4</code>, you should return the list as <code>2->1->4->3</code>.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
題目大意:
交換每兩個節點的位置。
代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<code>/**</code>
<code> </code><code>* Definition for singly-linked list.</code>
<code> </code><code>* struct ListNode {</code>
<code> </code><code>* int val;</code>
<code> </code><code>* ListNode *next;</code>
<code> </code><code>* ListNode(int x) : val(x), next(NULL) {}</code>
<code> </code><code>* };</code>
<code> </code><code>*/</code>
<code>class</code> <code>Solution {</code>
<code>public</code><code>:</code>
<code> </code><code>ListNode* swapPairs(ListNode* head) {</code>
<code> </code><code>ListNode* left,*right,*pre,*p;</code>
<code> </code><code>pre = NULL;</code><code>//記錄每兩個節點前面的那個節點</code>
<code> </code><code>p = head;</code>
<code> </code><code>while</code><code>(p !=NULL && p->next != NULL)</code>
<code> </code><code>{</code>
<code> </code><code>left = p;</code>
<code> </code><code>right = p->next;</code>
<code> </code>
<code> </code><code>left->next = right->next;</code>
<code> </code><code>right->next = left;</code>
<code> </code><code>if</code><code>(pre != NULL)</code>
<code> </code><code>{</code>
<code> </code><code>pre->next = right;</code>
<code> </code><code>}</code>
<code> </code><code>else</code><code>//連結清單的頭兩個節點交換位置</code>
<code> </code><code>head = right;</code>
<code> </code><code>pre = left;</code>
<code> </code><code>p = left->next;</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>head;</code>
<code> </code><code>}</code>
<code>};</code>
<code></code>
本文轉自313119992 51CTO部落格,原文連結:http://blog.51cto.com/qiaopeng688/1837471