LeetCode Java刷题笔记—328. 奇偶链表

本文介绍了一种链表操作算法——奇偶链表重组。该算法将单链表中的节点按奇偶索引分为两组,再重新连接。通过维护奇链表和偶链表的头部节点及前驱节点,确保链表正确重组。

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

328. 奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

中等难度。首先将链表进行拆分,同时保存一个当前节点的前驱节点的引用pre,并且使用一个flag标识位,来表示最后的节点是属于奇链表还是偶链表。

如果flag为false,表示最后的节点属于偶链表,那么就用前驱节点pre链接偶链表的头节点;如果flag为true,表示最后的节点属于奇链表,那么就用最后的节点head链接偶链表的头节点。

public ListNode oddEvenList( ListNode head ){

   if( head == null || head.next == null ){
      return head;
   }
   //odd,奇链表头部节点;even,偶链表头部节点;pre,前驱节点
   ListNode odd = head, even = head.next, pre = null;
   //flag表示最后的节点是属于奇链表还是偶链表
   boolean flag = true;
   while( head.next != null ){
      flag = !flag;
      ListNode next = head.next;
      head.next = next.next;
      pre = head;
      head = next;
   }
   //如果flag为false,表示最后的节点属于偶链表,那么就用前驱节点pre链接偶链表的头节点
   //如果flag为true,表示最后的节点属于奇链表,那么就用最后的节点head链接偶链表的头节点
   if( !flag ){
      pre.next = even;
   }
   else{
      head.next = even;
   }
   //返回奇链表的头节点
   return odd;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值