题目描述:
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.
不能修改节点的值,即只能进行对指针的修改。考虑用递归求解比较简单,即交换链表的前两个元素,然后用递归求出从第三个元素开始的链表的交换结果,将其置于第二个元素之后,然后返回第一个元素的指针即可。另外值得注意的是递归需要用到head->next->next,所以对于元素个数小于2的链表要先排除。class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL) return NULL;
else if(head->next==NULL) return head;
else
{
ListNode* p=head->next;
ListNode* q=swapPairs(head->next->next);
p->next=head;
head->next=q;
return p;
}
}
};

本文介绍了一种链表中相邻节点的交换算法,通过递归方式实现,不改变节点值只调整指针指向,适用于需要调整链表结构而不更改数据的情况。
294

被折叠的 条评论
为什么被折叠?



