Leetcode每日一题2020.11.13第328题:奇偶链表

328.奇偶链表

题目描述

在这里插入图片描述
在这里插入图片描述

思路、算法及代码实现

方法:分离节点后合并
如果链表为空,则直接返回链表。
对于原始链表,每个节点都是奇数节点或偶数节点。头节点是奇数节点,头节点的后一个节点是偶数节点,相邻节点的奇偶性不同。因此可以将奇数节点和偶数节点分离成奇数链表和偶数链表,然后将偶数链表连接在奇数链表之后,合并后的链表即为结果链表。
原始链表的头节点head也是奇数链表的头节点以及结果链表的头节点,head的后一个节点是偶数链表的头节点。令evenHead = head.next,则evenHead是偶数链表的头节点。
维护两个指针odd和even分别指向奇数节点和偶数节点,初始时odd = head,even = evenHead。通过迭代的方式将奇数节点和偶数节点分离成两个链表,每一步首先更新奇数节点,然后更新偶数节点。
1、更新奇数节点时,奇数节点的后一个节点是偶数节点,需要指向偶数节点的后一个节点,因此令odd.next = even.next,然后令odd = odd.next,此时odd变成even的后一个节点。
2、更新偶数节点时,偶数节点的后一个节点是奇数节点,需要指向奇数节点的后一个节点,因此令even.next = odd.next,然后令even = even.next,此时even变成odd的后一个节点。
在上述操作之后,即完成了对一个奇数节点和一个偶数节点的分离。全部节点分离完毕的条件是even为空节点或者even.next为空节点,此时odd指向最后一个奇数节点。
最后令odd.next = evenHead,将偶数链表连接在奇数链表之后,即完成了奇数链表和偶数链表的合并,结果链表的头节点仍然是head。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值