0%

swap-nodes-in-pairs

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

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

解决方案

主要还是弄清楚指针指来指去的顺序。还有注意把两两交换后的节点对连起来。

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
37
38
39
40
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* swapPair(ListNode* n1)
{
ListNode* p = n1;
ListNode* q = n1->next->next;
n1 = n1->next;
n1->next = p;
n1->next->next = q;
return n1;
}
ListNode* swapPairs(ListNode* head) {
if (!head || !head->next)
return head;
ListNode* h = head;
ListNode* link = head;
bool flag = true;
do
{
ListNode* tmp = h;
tmp=swapPair(tmp);
if (flag)
{
head = tmp;
flag = false;
}
else
{
link->next = tmp;
link = tmp->next;
}
h = tmp->next->next;
if (!h||!h->next)
break;
} while (true);
return head;
}