给定一个链表,两两交换其中的节点,并返回交换后的链表。
示例:
给定1->2->3->4,你应该返回2->1->4->3
题解(一):利用递归的方法,每次递归反转一对链节,将其插入新链表的结尾
class Solution {
public:
/*
*进行递归调用,一次反转一对链节
*每次递归调用代入的是新链表的表尾和剩余未反转链表
*rest表示剩余还没有进行反转的子链表
*head是存储成对反转结果的新链表的尾链节
*/
void insert(ListNode* rest, ListNode* head)
{
int pair = 0;
while (rest != NULL && pair < 2)
{
ListNode* temp = rest;
rest = rest->next;
temp->next = head->next;
head->next = temp;
pair++;
}
ListNode* newHead = head;
for (int k = 0;k < pair;k++)
newHead = newHead->next;
if (rest != NULL)
insert(rest, newHead);
}
//返回进行成对反转后的链表
ListNode* swapPairs(ListNode* head)
{
ListNode* resHead = new ListNode;
insert(head, resHead);
return resHead->next;
}
};