【数据结构与算法】链表的分割

news2025/2/24 20:41:06

需求分析:

        将链表分为两个部分在X前是小于X的,在X后是大于X的。只需要分割不需要排序。

实现思路:

        通过从头节点开始遍历,判断小于X的放入一条链表种,大于X的放入另一个链表中,最后将两条链表相连,X置于两条链表相连的中点,如果链表中没有X则添加一个X节点。

实现方法:

/**
 * 链表的分割
 * @param node 传入头节点
 * @param x 分割数
 * @return
 */
public static Node partition(Node node, int x) {
        Node linked1 = new Node(0);
        Node linked2 = new Node(0);

        Node curr1 = linked1;
        Node curr2 = linked2;

        Node head = node;
        Node nodeX = null;
        while (head != null) {
            if (head.val < x) {
                curr1.next = head;
                curr1 = curr1.next;
            } else if (head.val > x) {
                curr2.next = head;
                curr2 = curr2.next;
            } else {
                nodeX = head;
            }
            head = head.next;
        }if (nodeX==null){
            nodeX=new Node(4);
        }
        curr1.next = nodeX;
        nodeX.next = linked2.next;
        curr2.next = null;
        return linked1.next;
    }

    //链表的节点类
    public static class Node {
        private int val;
        private Node next;

        public Node(int val) {
            this.val = val;
        }
    }

测试:

public static void main(String[] args) {
        Node node1 = new Node(1);
        Node node2 = new Node(3);
        Node node3 = new Node(5);
        Node node4 = new Node(7);
        Node node5 = new Node(6);
        Node node6 = new Node(4);
        Node node7 = new Node(2);


        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;

        System.out.print("分割前:");
        Node head1 =node1;
        while (head1 != null) {
            System.out.print(head1.val);
            head1 = head1.next;
        }
        System.out.println();
        System.out.print("分割后:");

        Node head2 = partition(node1, 4);
        while (head2 != null) {
            System.out.print(head2.val);
            head2 = head2.next;
        }
    }

测试结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android之TextView自由选择复制

文章目录 前言一、效果图二、实现步骤1.OnSelectListener2.SelectionInfo类3.TextLayoutUtil类4.复制弹框的xml布局5.弹框背景Drawable6.倒三角Drawable7.复制工具类8.调用 总结 前言 根据时代进步&#xff0c;那些干产品的也叼砖起来了&#xff0c;今天就遇到一个需求&#x…

孙哥Netty视频笔记总结

视频在这儿&#xff1a;https://blog.csdn.net/weixin_43996338/article/details/133771464 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】 【更多面试资料请加微信号&#xff1a;suns45】 https://flowus.cn/share/f6cd2cbe-627a-43…

苍穹外卖(二)新增员工及项目细节

我们实现员工管理功能: 新增员工员工分页查询启用禁用员工账号编辑员工导入分类模块功能代码 员工管理效果&#xff1a; 员工管理效果&#xff1a; 1. 新增员工 1.1 需求分析和设计 接口设计 明确新增员工接口的请求路径、请求方式、请求参数、返回数据。 表设计 新增…

让物体移动到点击的位置

using System.Collections; using System.Collections.Generic; using UnityEngine;public class MouseRayPoint : MonoBehaviour {Vector3 target; // 跟踪目标public float smoothTime 5f; // 平滑时间private Vector3 velocity Vector3.zero;GameObject mainRole;public f…

4、在docker容器内的tomcat 中发布项目

1、查看本地是否有tomcat镜像&#xff0c;如果不存在则去下载 docker images 2、查看本地是否有tomcat容器&#xff0c;如存在跳过第3步 docker ps 3、创建tomcat容器 此容器用于复制tomcat的配置文件&#xff0c;配置文件复制后需删除此容器&#xff0c;如果已经存在跳过此步…

18.(开发工具篇Gitlab)Git如何回退到指定版本

首先: 使用git log命令查看提交历史,找到想要回退的版本的commit id. 使用git reset命令 第一步:git reset --hard 命令是强制回到某一个版本。执行后本地工程回退到该版本。 第二步:利用git push -f命令强制推到远程 如下所示: 优点:干净利落,回滚后完全回到最初状态…

创新视频剪辑:轻松实现批量垂直翻转,提高视频品质与吸引力

在视频剪辑的过程中&#xff0c;我们常常需要面对各种各样的需求。比如&#xff0c;有些视频需要进行垂直翻转&#xff0c;以创造出独特的视觉效果。然而&#xff0c;如果一个个手动操作&#xff0c;不仅费时费力&#xff0c;还可能因为重复性工作导致剪辑质量下降。那么&#…

【学习笔记】数据一致性分发

为什么要数据分发 微服务中&#xff0c;每个服务都有独立的数据源&#xff0c;这使得数据同步成为难题。 拉模式or推模式&#xff1f; 拉模式存在的问题 由于网络延迟&#xff0c;拉取的数据不一定是最新的 如果频繁向另一服务拉取数据&#xff0c;会给服务造成压力&#xf…

解决typescript项目报错:找不到模块“xxx”或其相应的类型声明

现象&#xff1a; 解决办法&#xff1a;在项目根目录下新建后缀为.d.ts文件&#xff0c;然后通过declare module 将相应的资源类型放进去即可 比如上面的例子&#xff1a; 新建一个typing.d.ts文件&#xff0c;然后声明一行&#xff1a; declare module "/redux/*"…

模拟信号隔离器在水处理控制系统中的应用方案

安科瑞 崔丽洁 摘要&#xff1a;水处理控制系统中&#xff0c;其控制、监测模块的非电量模拟量传感器采用信号隔离器的接线方式合理地解决了相关模拟量传感器供电电源安全和相对独立的问题&#xff0c;保证了监测模块的电源、模拟量采集模块和输出模块的相对隔离&#xff0c;降…

MVVM 与 MVC区别和应用场景?

MVVM 和 MVC 1. MVC2. MVVM 1. MVC MVC 是 Model View Controller 的缩写 Model&#xff1a;模型层&#xff0c;是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff1a;视图层&#xff0c;用户界面渲染逻辑&#xff0c;通常视图…

微信页面公众号页面 安全键盘收起后键盘下方页面留白

微信浏览器打开H5页面和公众号页面&#xff0c;输入密码时调起安全键盘&#xff0c;键盘收起后 键盘下方页面留白 解决办法&#xff1a; 1、&#xff08;简单&#xff09;只有在调起安全键盘&#xff08;输入密码&#xff09;的时候会出现这种情况&#xff0c;将input属性改为n…

01-自动内存管理机制

一、走进java 每个文件都有自己的格式&#xff0c;java也不例外&#xff0c;而JVM通常是通过16进制对应的java汇编码来解释的&#xff0c; magic&#xff08;魔数&#xff09; 每个Java class 文件的前4个字节被称为他的魔数&#xff08;magic number&#xff09;&#xff1a;…

ASCII 码对照表详解

原文 https://baijiahao.baidu.com/s?id1704767913015693638&wfrspider&forpc 其实大家都知道计算机是老美发明的&#xff0c;当初人家并没有考虑后来需要增加那么多字符&#xff0c;比如中国的汉字&#xff0c;那么早期的美国常用字符&#xff0c;用 1 个字节的前 7…

Unity设计模式——建造者模式

Product类——产品类&#xff0c;由多个部件组成。 class Product {IList<string> parts new List<string>();//添加产品部件public void Add(string part){parts.Add(part);}public void Show(){foreach (string part in parts){Debug.Log("产品:"pa…

python关联分析实践学习笔记

曾经有个沃尔玛超市&#xff0c;它将啤酒与尿布这样两个奇怪的东西放在一起进行销售&#xff0c;并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加。 我们关注的是在这样的场景下&#xff0c;如何找出物品之间的关联规则。接下来就来介绍下如何使用Apriori算法&…

【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

您需要知道的API基础知识都在这里

API是应用程序编程接口&#xff08;Application Programming Interface&#xff09;的缩写&#xff0c;能够起到两个软件组件之间的连接器或中介的作用。此类接口往往通过一组明确的协议&#xff0c;来表示各种原始的请求和响应。API文档可以向开发人员展示请求和响应是如何形成…

跨境独立站代购中国电商平台商品PHP多语言多货币

跨境独立站代购中国电商平台商品是指代购者在海外建立自己的独立电商平台&#xff0c;代理中国主流电商平台&#xff08;如淘宝、京东等&#xff09;的商品进行销售和代购。这种模式的优势在于代购者可以自主选择产品和价格策略&#xff0c;同时还能提供更专业和优质的服务。 …

【爬虫】python爬虫爬取网站页面(基础讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…