一、题目
给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3
输出:1->2->2->4->3->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、分析及代码
1. 模拟
(1)思路
在遍历过程中,按要求模拟构造两个链表,然后将其连接起来。
(2)代码
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode leftHead = new ListNode(0), left = leftHead;
ListNode rightHead = new ListNode(0), right = rightHead;
ListNode node = head;
while (node != null) {
if (node.val < x) {
left.next = node;
left = node;
} else {
right.next = node;
right = node;
}
node = node.next;
}
right.next = null;
left.next = rightHead.next;
return leftHead.next;
}
}
(3)结果
执行用时 :0 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :37.7 MB,在所有 Java 提交中击败了 76.26% 的用户。
三、其他
暂无。