《算法通关村第二关-----指定区间反转和两两交换链表中的节点》

    一、 下面是leetcode92题,借教官的话,两种方法和其他的链表解题的方法差不多,一个是插入法另外一个就是在链表上直接操作进行反转。

        先说第一种:插入法,需要先找出left的前节点,left节点,然后left节点后面到right节点不断往pre节点后面插入,最终完成反转,代码如下:   

         第二种:穿针法

        这种方法需要指定几个节点,left的前节点,left节点,right节点,right.next节点,确定节点后要把链表pre和right的next 置空,也就是断开链表,然后单独对区间部分进行反转,代码可以参考leetcode206的题解,反转完后再拼接起来,具体代码如下:

        

二、第二题是两两交换链表中的节点,这两个题目都是比较经典的题目需要熟悉掌握的,那下面带来两种解法,第一种是建立头节点交换法,第二个是递归。

 先说第一种,在虚拟头节点交换后,让指针指向需要交换的两个节点且交换完成的奇数节点,至于3个节点的交换方法自己可以思考一下,不止一种,下面是代码:

        

第二种则是递归,这个不太好想到,但是比较简洁,我们可以把前两个节点当成一个整体,后面的节点当成一个整体,每次完成的是将奇数节点的指针指向后面节点那个整体,而后面节点返回的头部就是反转后的偶数节点,那么在函数传入的时候就每次把偶数节点的下一个节点当成一个头节点传入到函数中,函数每次为我们返回调整好后的偶数节点,以此类推直到传入的奇数节点为空或者next节点为空结束递归。代码如下:

        

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值