Java链表分割_java中有没有写好的单链表

Java链表分割_java中有没有写好的单链表描述:现有一链表的头指针ListNode*pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。/*publicclassListNode{intval;ListNodenext=null;ListNode(intval){this.val=val;}}*/publicclassPartition{publicListNo

大家好,又见面了,我是你们的朋友全栈君。

描述:
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/
public class Partition { 
   
    public ListNode partition(ListNode pHead, int x) { 
   
        // write code here
        if(pHead == null || pHead.next == null){ 
   
            return pHead;
        }
        
        //newHead的指针
        ListNode newHead = new ListNode(-1);
        ListNode tmp = newHead;
        //pHead的指针
        ListNode preCur = pHead;
        ListNode cur = preCur.next;
        //把小于x的节点放进newHead链表里
        //其余结点不动
        while(cur != null){ 
   
            if(cur.val < x){ 
   
                preCur.next = cur.next;
                tmp.next = cur;
                tmp = tmp.next;
                cur = preCur.next;
            }else{ 
   
                preCur = preCur.next;
                cur = preCur.next;
            }
        }
        //判断头节点并拼接链表newHead -> pHead
        if(pHead.val < x){ 
   
            cur = pHead;
            pHead = pHead.next;
            cur.next = newHead.next;
            tmp.next = pHead;
            return cur;
        }else{ 
   
            tmp.next = pHead;
            return newHead.next;//删除pHead中的头节点
        }
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135328.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SCL语言(入门初级笔记)「建议收藏」

    SCL语言(入门初级笔记)「建议收藏」点动控制电机程序//点动陈序IF”点动启动”=1THEN”KM1点动”:=1;ELSE”KM1点动”:=0;END_IF;

    2022年10月7日
    2
  • Logback日志工具使用详解

    Logback日志工具使用详解由于Logback比log4j和SLF4J拥有众多优点,如性能(据说有时达到10倍以上),并且支持自动加载配置文件,自动删除旧的日志文件,以及同一个logback配置文件同时适应开发,测试,生产等。因此Logback官方强烈建议开发人员从log4j转到使用Logback。

    2022年6月17日
    32
  • python循环速度提高_提高python中for循环的速度

    python循环速度提高_提高python中for循环的速度我正在计算从 1 到 10 7 的数字的分区数 我用五边形数定理来实现 它提供了一种计算 n 的划分数的方法 我们称之为 P n P n 1 P n 2 P n 5 P n 7 所以 P n 依赖于不同的 P n x 其中 x 从 1 到 n 总之 长话短说 我使用两个循环 一个从 1 到 10 7 另一个使用 x 的定义 并根据特定的公式计算 正如您可以想象的 代码执行得相当慢 有什么方法可以提高这些 for 循环的速

    2025年10月27日
    3
  • opencv保存图片小bug

    opencv保存图片小bug错误:cv2.error:OpenCV(4.4.0)C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-6sxsq0tp\opencv\modules\imgcodecs\src\loadsave.cpp:667:error:(-2:Unspecifiederror)couldnotfindawriterforthespecifiedextensioninfunction’cv::imwrite_’图片路径不对,

    2022年6月23日
    29
  • buck降压电路解析

    buck降压电路解析1.拓扑模型如下2.需要的元器件如下:元器件:开关管T、续流二极管D、储能电感L、滤波电容C、负载电阻R输入电压:Ui输出电压:Uo特性:Ui>Uo3.三种工作模式BCM、CCM、DCM3.1CCM–电感电流连续导通模式3.2当Imin减小到零时,电路由CCM模式进入BCM—电感电流临界导通模式3.3DCM—电感电流非连续/断续导通模式4.举例子LM2576/2596下图中的R1/R2阻值一般是k级别电阻,100k左右,目的是减少功耗5.常见的厂商TI、MP

    2022年6月20日
    66
  • Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」

    Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」Protel如何从零开始学习?找个有实例的书,或有原理图,有PCB的书,把他画好,先从单面板画起,(找个简单的)自己再热转印法制作PCB,钻孔、焊接元件、调试等等,看似后面与学PROTEL无关,但这些可以让你对PCB布线有更深认识,比如、元件封装尺寸一定要精确、焊盘大小、走线粗细、元件布局放置等等,更能总结好的画图经验!更接近实际应用,这样才能掌握画图的乐趣,当我自己布的PCB的发射机,可以用收音…

    2022年5月7日
    88

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号