【链表问题】打卡7:将单向链表按某值划分成左边小,中间相等,右边大的形式...

news/2024/5/20 2:25:50

前言

以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获。每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢。

注:如果代码排版出现了问题麻烦通知我下,谢谢。

【题目描述】

给定一个单向链表的头结点head,节点的值类型是整型,再给定一个整数privot。实现一个调整链表的函数,将链表调整为左部分都是值小于privot的节点,中间部分都是值等于privot的节点,右部分都是大于privot的节点。且对某部分内部节点的顺序不做要求

例如:链表9-0-4-5-1,pivot=3。

调整后是1-0-4-9-5,

也可以是0-1-9-5-4

【要求】

如果链表的长度为 N, 时间复杂度达到 O(N)。

【难度】

尉:★★☆☆

【解答】

这道题在思路上还是比较简单的,但是在实现上还是有一些细节需要主要的。

本题对某部分的内部节点不做要求,一种很简单的方法就是用一个数组来存链表的节点,然后像类似于快速排序的分割函数那样,按照某个值把他们进行划分。

不过这样做的话,空间复杂度为 O(N)。我们也可以采取使用3个指针,把原链表依次划分成三个部分的链表,然后再把他们合并起来,这种做法不但空间复杂度为 O(1), 而且内部节点的顺序也是和原链表一样的。虽然思路简单,但在代码实现上也是有很多细节需要注意的,有时间的话希望大家动手打下码。

代码如下

    //用三个指针处理,这道题主要是要注意串联链表时的一些细节处理
    public static Node listPartition(Node head, int pivot) {
        Node sB = null;//小的指针头,即small begin
        Node sE = null;//小的指针尾,即 small end
        Node eB = null;//中的指针头,即 equal begin
        Node eE = null;//中的指针尾,即emall end
        Node bB = null;//大的指针头,即 big begin
        Node bE = null;//大的指针尾,即 big end
        Node next = null;//保存下一个节点
        //进行划分
        while (head != null) {
            next = head.next;
            head.next = null;
            if (head.value < pivot) {
                if (sB == null) {
                    sB = head;
                    sE = head;
                } else {
                    sE.next = head;
                    sE = sE.next;
                }
            } else if (head.value == pivot) {
                if (eB == null) {
                    eB = head;
                    eE = head;
                } else {
                    eE.next = head;
                    eE = eE.next;
                }
            } else {
                if (bB == null) {
                    bB = head;
                    bE = head;
                } else {
                    bE.next = head;
                    bE = bE.next;
                }
            }
            head = next;
        }
        //把三部分串连起来,串联的时候细节还是挺多的,
        //串联的过程下面代码的精简程度是最学习的部分了
        
        //1.小的与中的串联
        if (sB != null) {
            sE.next = eB;
            eE = eE == null ? sE : eE;
        }
        //2.中的和大的连接
        if (eB != null) {
            eE.next = bB;
        }
        return sB != null ? sB : eB != null ? eB : bB;
    }

问题拓展

思考:如果给你的是一个环形链表,让你来划分,又该如何实现呢?

【题目描述】

【要求】

【难度】

未知。

【解答】

无。

往期

【链表问题】打卡6:三种方法带你优雅判断回文链表

【链表问题】环形单链表约瑟夫问题

【链表问题】如何优雅着反转单链表

最后推广下我的公众号:苦逼的码农,文章都会首发于我的公众号,期待各路英雄的关注交流。

转载于:https://www.cnblogs.com/kubidemanong/p/10426980.html


http://www.niftyadmin.cn/n/3823407.html

相关文章

Android程序开发中关于设置全屏无效问题

首先介绍给大家两种全屏设置方法&#xff1a; 方法一&#xff1a;在AndroidManifest.xml中的Application节点中修改android:theme属性 android:theme"android:style/Theme.NoTitleBar.Fullscreen" 方法二&#xff1a; 在onCreate方法中的setContentView调用前添加 th…

哪些人不适合吃枸杞?

阴盛体质者&#xff0c;如体胖&#xff0c;苔腻&#xff0c;怕冷&#xff0c;不欲饮,还有脾胃虚寒者&#xff01; 枸杞的性味甘平&#xff0c;中医认为&#xff0c;它能够滋补肝肾、益精明目和养血、增强人们的免疫力。枸杞中所含的胡萝卜素及多种维生素能有效预防心脏病和癌症…

搜索引擎相关资料

asp.net搜索引擎&#xff08;网络爬虫&#xff09;设计及研发 C#解析HTML HtmlParser.NET 参考资料 http://www.cnblogs.com/finallyliuyu/archive/2010/03/20/1690358.html 探讨如何利用C#登录QQ邮箱进行群邮件的发送 冷月Email搜索器 QQ邮箱采集&#xff1a;http://download…

喝酸奶的注意事项

导读&#xff1a;很多女性喜欢喝酸奶&#xff0c;一个重要的原因就是认为不管喝多少&#xff0c;都不会发胖。酸奶确实有一定的减肥效果&#xff0c;主要是因为它含有大量活性乳酸菌&#xff0c;能够有效地调节体内菌群平衡&#xff0c;促进胃肠蠕动&#xff0c;从而缓解便秘。…

反卷积 转置卷积 的原理

转载了这篇文章 博主写的非常明白 https://blog.csdn.net/LoseInVain/article/details/81098502 https://blog.csdn.net/LoseInVain/article/details/81098502 https://blog.csdn.net/LoseInVain/article/details/81098502 一文搞懂反卷积&#xff0c;转置卷积 前言 本文翻译自…

Graphics --- 学习笔记

Graphics 类提供将对象绘制到显示设备的方法。 Graphics 与特定的设备上下文关联 1, 获取 Graphics 对象 &#xff1a; http://www.csharpwin.com/csharpspace/10742r4084.shtml http://msdn.microsoft.com/zh-cn/library/5y289054.aspx A, 通过处理控件的 Control.Paint 事件…

Struts2 资源配置文件国际化详解

Struts2 资源配置文件国际化Struts2资源文件的命名规范&#xff1a;basename_language_country.propertiesStruts2国际化如果系统同时存在资源文件、类文件&#xff0c;系统将以类文件为主&#xff0c;而不会调用资源文件。对于简体中文的Locale&#xff0c;ResourceBundle搜索…

水平钓鱼钩

在钓鱼时总看到鱼标在动&#xff0c;但鱼就是不上钩。  为什么鱼儿只是一点一点地吃饵料&#xff0c;而不是一口就把整个包住鱼钩的饵料吞进口中呢&#xff1f;  难道鱼儿不想一口吞下整块饵料&#xff1f;  不是&#xff0c;“鸟为食死”&#xff0c;鱼也一样会为食死。…