LeetCode Java刷题笔记—86. 分隔链表
Posted 刘Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—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