面试题02.04分割链表

链表分区算法实现
该博客详细介绍了如何实现一个链表分区的算法,将链表中的节点根据值小于或大于给定的整数x分成两部分。代码中使用了双指针技巧,分别维护两个链表,一个用于存储小于x的节点,另一个用于存储大于x的节点。最后,将小于x的链表接在大于x的链表之后,并处理特殊情况,如没有节点小于x的情况。整个过程保持了节点原有的顺序。

题目描述:

在这里插入图片描述

思路:

需要将一个链表分为两部分,前部分小于x,后部分大于x。并且节点之前的顺序不能变。所以每次向新链表添加时需要进行尾插法。分为两部分,值大于x的分为一部分,小于x的分为一部分。使用as,ae来表示大的那一部分的头和尾节点。使用bs,be来表示小的那一部分。使用中间变量cur来代替head遍历链表。当第一次插入节点时,使得bs/as=cur,并且be/ae=cur。非第一次插入则让be/ae.next=cur,be/ae=be/ae.next,be/ae始终保持在链表尾部。当所有的节点遍历完后,需要对bs进行判断,如果没有任何节点小于x,则返回as即可。注意:如果as不为空,需要将ae.next置为空,若ae.next不为空,可能造成死循环。
在这里插入图片描述

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode partition(ListNode head, int x) {

            if(head==null){
                return null;
            }

            ListNode bs=null;
            ListNode be=null;
            ListNode as=null;
            ListNode ae=null;


            ListNode cur=head;


            while(cur!=null){
                if(cur.val<x){
                    if(bs==null){
                        bs=cur;
                        be=cur;
                    }else{
                        be.next=cur;
                        be=cur;
                    }
                    cur=cur.next;
                }else{
                    if(as==null){
                        as=cur;
                        ae=cur;
                    }else{
                        ae.next=cur;
                        ae=cur;
                    }
                    cur=cur.next;
                }
            }

            if(bs==null){
                return as;
            }

            be.next=as;

            if(as!=null){
                ae.next=null;
            }

            return bs;
    }

}
### 安装ROS于Ubuntu 20.04 对于Ubuntu 20.04而言,安装ROS需确保版本匹配恰当[^1]。具体到操作层面,在准备阶段之后,通过命令行执行一系列指令来完成环境搭建。 #### 设置源与密钥 为了能够顺利获取软件包,设置国内镜像源可以提高下载速度并增加稳定性。接着添加ROS仓库的GPG密钥至系统: ```bash sudo apt update && sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - ``` 随后配置ROS库地址: ```bash echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2-latest.list ``` #### 更新索引与工具安装 更新本地包索引以反映新加入的资源位置,并安装`rosdep`及其他辅助开发工具,这一步骤能帮助解决依赖关系问题以及简化后续工作流程[^2]。 ```bash sudo apt update sudo apt install python3-rosdep python3-essential ``` 初始化`rosdep`数据库以便其知晓如何处理不同平台上的依赖项: ```bash sudo rosdep init rosdep update ``` #### ROS Noetic的具体安装 针对Ubuntu 20.04推荐使用的ROS发行版为Noetic Ninjemys,直接利用apt-get来进行全量桌面端安装是最简便的方式之一: ```bash sudo apt install ros-noetic-desktop-full ``` 此过程会自动拉取所有必要的组件文件,包括rviz可视化工具、rqt图形界面框架等核心功能模块。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值