一、题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
1 | 给定 1->2->3->4, 你应该返回 2->1->4->3. |
二、题解
1.算法描述
- 迭代法
2.个人分析
3.代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21struct ListNode *swapPairs(struct ListNode *head)
{
if (!head)
return NULL;
struct ListNode *prev = (struct ListNode *)malloc(sizeof(struct ListNode));
prev->next = head;
struct ListNode *pre = prev, *p = head->next;
while (head && head->next)
{
pre->next = p;
head->next = p->next;
p->next = head;
pre = head;
head = head->next;
if (!head)//预防空指针
p = NULL;
else
p = head->next;
}
return prev->next;
}