【问题描述】
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.
问题来源:swap-nodes-in-pairs【解题分析】
题意:给定一个链表,调换每两个相邻节点,并返回其头部。算法必须使用唯一不变的空间,不能修改列表中的值,只有节点本身是可以改变的。
我们也以1->2->3->4这个作为例子,交换前两个。
1. 没有节点,返回NULL作为结束。
2. 只有一个节点,不用进行交换,直接返回该节点即可。
我们也以1->2->3->4这个作为例子,交换前两个。
ListNode* result = head->next;
// become: 2->3->4
head->next = result->next;
// become:1->3->4
result->next = head;
// become:2->1->3->4
对后面的元素也进行swap,只需要用递归替换掉result->next。
ListNode* result = head->next;
head->next = swapPairs(result->next);
result->next = head;
递归终止的条件:
1. 没有节点,返回NULL作为结束。
2. 只有一个节点,不用进行交换,直接返回该节点即可。
【源代码】
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
ListNode* res = head->next;
head->next = swapPairs(res->next);
res->next = head;
return res;
}
};