• 【程序员面试金典】面试题 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;
        }
    };
    
  • 相关阅读:
    第二周编程总结
    介绍自己
    编程总结3
    PTA编程总
    PTA编程总结1
    《秋季学期学习总结》
    《人生路上对我影响最大的三位老师》
    介绍自己
    7-1 打印沙漏
    记叙在人生路上对你影响最大的三位老师
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/13095910.html
Copyright © 2020-2023  润新知