/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
}
};
面试题 02.04. 分割链表
给你一个链表的头节点 head
和一个特定值 x
,请你对链表进行分隔,使得所有 小于 x
的节点都出现在 大于或等于 x
的节点之前。
你不需要 保留 每个分区中各节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5]
示例 2:
输入:head = [2,1], x = 2 输出:[1,2]
提示:
[0, 200]
内-100 <= Node.val <= 100
-200 <= x <= 200
原站题解
python3 解法, 执行用时: 44 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-28 14:58:38
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def partition(self, head: ListNode, x: int) -> ListNode: sml_dummy, big_dummy = ListNode(0), ListNode(0) sml, big = sml_dummy, big_dummy while head: if head.val < x: sml.next = head sml = sml.next else: big.next = head big = big.next head = head.next sml.next = big_dummy.next big.next = None return sml_dummy.next
javascript 解法, 执行用时: 88 ms, 内存消耗: 42.6 MB, 提交时间: 2022-11-27 13:21:41
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @param {number} x * @return {ListNode} */ var partition = function(head, x) { let small = new ListNode(0); const smallHead = small; let large = new ListNode(0); const largeHead = large; while (head !== null) { if (head.val < x) { small.next = head; small = small.next; } else { large.next = head; large = large.next; } head = head.next; } large.next = null; small.next = largeHead.next; return smallHead.next; };
golang 解法, 执行用时: 4 ms, 内存消耗: 2.3 MB, 提交时间: 2022-11-27 13:21:22
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func partition(head *ListNode, x int) *ListNode { small := &ListNode{} smallHead := small large := &ListNode{} largeHead := large for head != nil { if head.Val < x { small.Next = head small = small.Next } else { large.Next = head large = large.Next } head = head.Next } large.Next = nil small.Next = largeHead.Next return smallHead.Next }