LeetCode - 0086 - Partition List

题目概要

将链表中小于某个值的结点移到链表最前方。

原题链接

Partition List

题目解析

简单的数据结构题,解题思路如下:

  1. 迭代链表,将之分为两部分,一条小于x,一条不小于x
  2. 合并两条链表

复杂度分析

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

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
private:
    ListNode* nextNode(ListNode*& head) {
        if (head == NULL)
            return NULL;
        ListNode* current = head;
        head = head->next;
        current->next = NULL;
        return current;
    }
    
    void pushBack(ListNode*& head, ListNode*& tail, ListNode* node) {
        if (head == NULL || tail == NULL) {
            head = tail = node;
            return;
        }
        tail->next = node;
        tail = node;
        return;
    }
    
public:
    ListNode* partition(ListNode* head, int x) {
        if (head == NULL || head->next == NULL)
            return head;
        
        ListNode* less = NULL;
        ListNode* lessTail = NULL;
        ListNode* notLess = NULL;
        ListNode* notLessTail = NULL;
        ListNode* current = NULL;
        
        while(head != NULL) {
            current = nextNode(head);
            if (current->val < x) {
                pushBack(less, lessTail, current);
            }
            else {
                pushBack(notLess, notLessTail, current);
            }
        }
        
        if (less == NULL)
            return notLess;
        
        if (lessTail != NULL)
            lessTail->next = notLess;
        return less;
    }
};

广告区域

本人和小伙伴们承接各种软件项目,有需求的可以联系我们。
QQ: 2992073083

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,470评论 0 25
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,011评论 2 36
  • 因为之前就复习完数据结构了,所以为了保持记忆,整理了一份复习纲要,复习的时候可以看着纲要想具体内容。 树 树的基本...
    牛富贵儿阅读 7,086评论 3 10
  • leetcode刷题记录本文记录一下leetcode刷题记录,记录一下自己的解法和心得。 LeetCode Two...
    EarthChen阅读 3,529评论 0 6