【算法】分隔链表

QuibblerQuibbler 2024-05-16 约 3 分钟 1442 次阅读

【算法】分隔链表

链表是算法中比较能考察逻辑和编码基本功的题型。这道题有意思的是题目描述很唬人,看着有点难度是mid,仔细分析实际上只能算easy。

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]

示例 2:输入:head = [2,1], x = 2输出:[1,2]

题目描述的比较绕,其实只需要遍历一遍链表:把比给定x节点小的都放在前面,大于或者等于x节点的都放在后面,保持有来的相对位置不变。最后再把两截链表拼上即可。

public ListNode partition(ListNode head, int x) {
        //定义两个链表
        ListNode head1 = new ListNode(-1);
        ListNode head2 = new ListNode(x);
	
        //临时保存遍历过程中当前节点
        ListNode tmp1 = head1, tmp2 = head2;
	
        while (head != null) {
            if (head.val < x) {
                //把比给定x节点小的都放在前面
                tmp1.next = head;
                tmp1 = tmp1.next;
            }else{
                //大于或者等于x节点的都放在后面
                tmp2.next = head;
                tmp2 = tmp2.next;
            }
            head = head.next;
        }
        
        //一定要把这个链表尾部置空,因为可能已经链接到其它位置去。
        tmp2.next = null;
	
        //尾部tmp1和头部head2,前后两个链表拼接上
        tmp1.next = head2.next;
        
        return head1.next;
    }

相关推荐

精选
获取系统SDK版本、判断手机ROM
Code

获取系统SDK版本、判断手机ROM

Build获取系统SDK版本Android中部分API的使用,需要在特定的SDK版本之后才能使用,因此在兼容老版本SDK的时候,经常需要判断API的版本。各种Android版本的对应关系参考《Android各版本对应的SDK版本》判断手机ROM有时候需要判断手机系统的ROM,检测ROM是MIUI、EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件(关于build.p

3.7k
精选
AndroidStudio中各种中文乱码问题
Code

AndroidStudio中各种中文乱码问题

AndroidStudio中各种中文乱码问题1、编译Java错误信息乱码在出现这个Annotation processors must be explicitly declared now...问题的时候,正好也发现AndroidStudio Build Output错误信息都乱码。经常遇到各种问题,习惯了,现在遇到的问题,都是以后的答案。 1.1、修改项目build.gradle(无效)在整个p

2.4k
AndroidStudio 报错:has no declaration in the base values folder
Code

AndroidStudio 报错:has no declaration in the base values folder

在资源文件中正常定义的值,也能编译运行。昨天还正常,今天一打开就报错。应该又是AndroidStudio自身的Bug了。原因众说纷纭,参考Stack Overflow 一篇类似的讨论。解决:File => Invalidate Caches / Restart => Invalidate and Restart.

4.4k