阅读 79

LeetCode—分隔链表

  • 给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。

  • 你应当保留两个分区中每个节点的初始相对位置。

示例: 输入:head = 1->4->3->2->5->2, x = 3 输出:1->2->2->4->3->5 复制代码

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa…

思路

  • 首先根据题目判断题目的类别

    • 那么我们在遍历的时候,如果只使用一个哑结点可能是不能实现的

    • 重新理解题意是小于x的元素节点都是在前面

    • 大于等于x的元素节点都在后面

    • 那么根据上面梳理的思路就是创建两个哑结点

    • 一个链保存小于x的元素,另一个链保存大于等于x的元素

    • 最后将小于x的元素指向大于等于x的元素

    • 明显就是普通遍历链表的思路

    • 但是值得注意的是题目中提到的是要注意,原链表元素的相对顺序不能改变

 class Solution {     public ListNode partition(ListNode head, int x) {         ListNode small = new ListNode(0);   //创建哑节点         ListNode smallHead = small;         ListNode large = new ListNode(0);   //创建哑节点         ListNode largeHead = large;         while(head != null){             if(head.val < x){                 small.next = head;                 small = small.next;             }else{                 large.next = head;                 large = large.next;             }             head = head.next;         }         large.next = null;   //将最后一个元素的下一个元素赋为空,"封死路口"         small.next = largeHead.next;  //将小值链表 与大值链表 连接;         return smallHead.next;     } }


作者:xiaoff
链接:https://juejin.cn/post/7016864384177668133


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐