题目描述:
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;
}
}
};