题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
出处
思路
前两个结点先偷一手用交换val做,从链表第1项(0开始计数)开始递归调用来交换结点。
代码
class Solution {
public:
ListNode* my_swap(ListNode *h){//交换h后的两个结点并返回下一结点的指针
if(!h->next||!h->next->next)return nullptr;
ListNode* p=h->next;
ListNode* q=h->next->next;
p->next=q->next;
h->next=q;
q->next=p;
return p;
}
ListNode* swapPairs(ListNode* head) {
//先处理前两个
if(!head||!head->next)return head;
int t=head->next->val;
head->next->val=head->val;
head->val=t;
ListNode* p=head->next;
while(p) p=my_swap(p);
return head;
}
};