栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode Java刷题笔记—86. 分隔链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode Java刷题笔记—86. 分隔链表

86. 分隔链表

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

虽然是中等难度的题目,但实际上很好理解,也比较简单,我们依次遍历链表的每一个节点,根据值的大小拆分成两个链表,然后再组合起来即可。

这里还需要使用到dummy节点,记住,当head节点可能变化或者不确定的时候,一般都需要使用dummy节点。

需要注意的是,在将原链表节点转移到另外两个链表中之后,一定要将当前节点的next置为null,否则可能造成循环引用。

public class LeetCode86{

   public ListNode partition( ListNode head, int x ){
      //小于x的节点链表
      ListNode dummy1 = new ListNode( 0 );
      ListNode pre1 = dummy1;
      //大于等于x的节点链表
      ListNode dummy2 = new ListNode( 0 );
      ListNode pre2 = dummy2;

      while( head != null ){
         ListNode next = head.next;
         //大于等于x的节点
         if( head.val >= x ){
            pre2.next = head;
            pre2 = head;
         }
         //小于x的节点
         else{
            pre1.next = head;
            pre1 = head;
         }
         //这一步一定要做,解除目前的关系,防止形成环形链表
         head.next = null;
         head = next;
      }
      //拼接链表
      pre1.next = dummy2.next;
      return dummy1.next;
   }

   public class ListNode{

      int val;
      ListNode next;

      ListNode(){

      }

      ListNode( int val ){

         this.val = val;
      }

      ListNode( int val, ListNode next ){

         this.val = val;
         this.next = next;
      }
   }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/695501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号