程序员面试金典面试题 02.04. 分割链表

Posted galaxy-hao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面试金典面试题 02.04. 分割链表相关的知识,希望对你有一定的参考价值。

题目

编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。

示例:

输入: head = 3->5->8->5->10->2->1, x = 5
输出: 3->1->2->10->5->5->8

思路

使用两个链表分别存小和大于等于的目标数的链表,然后连接两个链表。

代码

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

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode *head1 = new ListNode(0);        
        ListNode *head2 = new ListNode(0);
        ListNode *h1 = head1, *h2 = head2;
        while (head) {
            if (head->val < x) {
                h1->next = head;
                h1 = h1->next;
            } else {
                h2->next = head;
                h2 = h2->next;
            }
            head = head->next;
        }
        h1->next = head2->next;
        h2->next = nullptr;
        return head1->next;
    }
};

以上是关于程序员面试金典面试题 02.04. 分割链表的主要内容,如果未能解决你的问题,请参考以下文章

程序员面试金典面试题 02.06. 回文链表

链表题 面试题02.04. 分割链表290. 单词规律20. 有效的括号

程序员面试金典面试题 02.05. 链表求和

Leetcode刷题笔记之链表篇面试题 02.04. 分割链表

Leetcode刷题笔记之链表篇面试题 02.04. 分割链表

Python 程序员面试金典 面试题 02.02. 返回倒数第 k 个节点