链表交换(leetcode)

该文讨论了两种方法来交换链表中的节点对。一是使用迭代,通过维护当前节点cur和接点jiedian,不断更新链表结构。二是采用递归,直接交换head的下一个节点与其后续节点的下一对节点,然后返回新的头节点。注意递归时的边界条件和节点指针的正确更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 迭代解决:设置变量头节点cur和jiedian,

cur->next=head

首先判断head是否为null,或者head->next=null,因为如果只有 一个节点1,则不需要交换

每次要变化的节点只有cur和head

listnode* nx=cur->next;//这个随着cur变化,放循环里

listnode* tmp=nx->next//随着cur变化,放循环里

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
ListNode* cur=new ListNode();
ListNode* jiedian = cur;
if(head==nullptr || head->next == nullptr)
return head;
cur->next=head;

while(cur->next!=nullptr && cur->next->next!=nullptr)
{
 ListNode* nxd = head->next;
 ListNode* tmp = nxd->next;
 cur->next=nxd;
 nxd->next=head;
 head->next=tmp;
 cur = head;
 head = tmp;
}
return jiedian->next;
    }
};

2递归:

易错在设置nx节点且最后返回的也是nx节点,理解为递归后head->next为空的

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {

if(head==nullptr || head->next==nullptr)
return  head;
ListNode* nx = head->next;
head->next = swapPairs(head->next->next);
nx->next = head;
return nx;
    }
};

第二个易错是nx->next=head放在递归之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值