LeetCode-Partition List

本文详细介绍了如何使用链表实现将所有小于指定值的节点置于所有大于等于该值的节点之前的算法,并通过示例代码进行演示。重点在于通过两次遍历实现链表的高效分区。

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

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.

For example,
Given 1->4->3->2->5->2 and x = 3,

return 1->2->2->4->3->5.

解法非常简单,新建另外两个链表,一个存储比x大的,一个存储比x小的,一次遍历。最后将两个链表连在一起。见代码:

public ListNode partition(ListNode head, int x) {
		ListNode root = new ListNode(0);
		ListNode rootGreateNode = new ListNode(0);
		ListNode lessNode = root;
		ListNode greaterNode = rootGreateNode;
		while (head != null) {
			if (head.val < x) {
				lessNode.next = head;
				lessNode = lessNode.next;
			} else {
				greaterNode.next = head;
				greaterNode = greaterNode.next;
			}
			head = head.next;
		}
		greaterNode.next = null;
		lessNode.next = rootGreateNode.next;
		return root.next;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值