【无标题】

1.力扣206题

首先定义cur为空节点 再定义pre为head头节点,之后进行反转并定义temp为下一个节点(防止下一节点2孤立无法继续循环) 之后继续将cur节点的next为pre   得到pre=cur cur=temp 直到none 变为尾节点 

 因为只能两个节点之间进行交换所以只能让下一个和下下个节点进行交换  接下来做指向操作,当cur.next = cur.next.next时,当虚拟头节点指向节点二时,此时找不到节点一的路径,所以在改变指向时,先创建临时指针tmp保存节点一的路径。在改变指向时任然可以找到节点一的路径,在改变节点二的指向之前,创建tmp1保存节点三的路径,这样在改变节点2的路径时接下来任然可以找到节点三的路径。最后cur指针向后移

 

 

例如链表 A→B→C→D→E→F→G,可以先把A~B看作一个单元,把C及C之后的看作一个单元,先把B指针指向A,A指针指向C,则实现了A、B两个元素的交换,此时再把CD交换,让A指向D,D指向C,C指向E,以此思路递推,即可实现递归算法

 

本题中将12 交换 再讲34 互换把2指向1 4指向3  从链表的头节点 head开始递归。每次递归都负责交换一对节点。由firstNode和secondNode 表示要交换的两个节点。下一次递归则是传递的是下一对需要交换的节点。若链表中还有节点,则继续递归。交换了两个节点以后,返回secondNode,因为它是交换后的新头 在所有节点交换完成以后,我们返回交换后的头,实际上是原始链表的第二个节点。
   

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值