题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
思路:
递归法或者迭代法
类似于反转链表,借助第三个指针
代码如下:
递归:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL||head->next==NULL){
return head;
}
ListNode* help=head->next;
head->next=swapPairs(help->next);
help->next=head;
return help;
}
};
迭代:
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode* newh=new ListNode(-1);
ListNode* p=newh;
ListNode* q=head;
while(q!=NULL&&q->next!=NULL){
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
p=q;
q=q->next;
}
return newh->next;
}
};