原题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
题目分析
方法一:偏要交换内部值法
方法二:迭代
方法三:递归
完整代码
struct ListNode* swapPairs(struct ListNode* head){
if(head==NULL)return head;
struct ListNode *cur=head,*next;
while(cur!=NULL&&cur->next!=NULL)
{
next=cur->next;
int temp=cur->val;
cur->val=next->val;
next->val=temp;
cur=next->next;
}
return head;
}
方法二:
struct ListNode* swapPairs(struct ListNode* head){
struct ListNode *res=(struct ListNode*)malloc(sizeof(struct ListNode)),*start=res,*end;
res->next=head;
while(start!=NULL&&start->next!=NULL&&start->next->next!=NULL)
{
end=start->next->next;
start->next->next=end->next;
end->next=start->next;
start->next=end;
start=end->next;
}
return res->next;
}
方法三:
struct ListNode* swapPairs(struct ListNode* head){
if(head==NULL||head->next==NULL)
return head;
struct ListNode *next=head->next;
head->next=swapPairs(head->next->next);
next->next=head;
return next;
}