第一种解法 非递归:
更新p和head的值
非递归的相关代码如下:
//非递归代码
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(!head || !head->next) //不需要交换
return head;
ListNode* new_head = new ListNode(0);
ListNode* p = new_head;
while(head && head->next)
{
ListNode* next = head->next;
ListNode* nnext = next->next;
p->next = next;
next->next = head;
head->next = nnext;
p = head;
head = nnext;
}
return new_head->next;
}
};
第二种解法 递归:
函数swapPairs(ListNode* head)返回的是以head为头结点的链表进行交换之后的头结点,递归函数的停止条件是以head开头的链表为空或者只有1个节点。
//递归解法
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(!head || !head->next) //不需要交换
return head;
ListNode* next = head->next; //取head的下一个节点
head->next = swapPairs(next->next);//将head和交换之后的头结点链接
next->next = head; //将原来第二个节点和head链接
return next;
}
};