LeetCode 0086 Partition List[分隔链表]

本文介绍了一种链表分隔算法,该算法可以将链表中的节点根据给定的值x进行分隔,使得所有小于x的节点位于大于或等于x的节点之前,同时保持各分区内的相对顺序不变。通过使用两个辅助链表分别收集小于x和大于等于x的节点,最后将两部分链接起来,实现O(N)时间复杂度和O(1)空间复杂度。

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

Example:

Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5


思路1

  1. 使用before_head 链表存放比 x 小的节点,after_head 链表存放比 x 大于或等于的节点,
  2. 分别使用 beforeafter 来为前面两个链表添加节点,用 head 来遍历原始链表。
  3. 当原始链表遍历完成时,我们需要将 before_head 链表连接上 after_head 链表,即 before->next=after_head->next;after->next=NULL;
  4. 初始化两个指针 beforeafter。在实现中,我们将两个指针初始化为哑结点(空的头结点) ListNode

时间复杂度: O(N)O(N)O(N) 空间复杂度:O(1)O(1)O(1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guf7lwb0-1586619598582)(https://i.loli.net/2020/04/06/UKn9HpFNVhweSxE.png)]

代码1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值