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

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—86. 分隔链表相关的知识,希望对你有一定的参考价值。

86. 分隔链表

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

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

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

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

/**
 * 86. 分隔链表
 * 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
 * 你应当 保留 两个分区中每个节点的初始相对位置。
 * https://leetcode-cn.com/problems/partition-list/
 * 中等
 */
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;
      
   

以上是关于LeetCode Java刷题笔记—86. 分隔链表的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—86. 分隔链表( 链表)—day60

Leetcode刷题100天—86. 分隔链表( 链表)—day60

LeetCode- 86 -分隔链表 - Java - 细喔

LeetCode Java刷题笔记—206. 反转链表

LeetCode Java刷题笔记—143. 重排链表

LeetCode Java刷题笔记—234. 回文链表