LeetCode- 86 -分隔链表 - Java - 细喔
Posted Dark And Grey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode- 86 -分隔链表 - Java - 细喔相关的知识,希望对你有一定的参考价值。
题目
这个题目中的 “分隔”并不是真正意义上分隔,将一个链表分隔成两个链表。
而是说 以一个整形数据x,让链表以 val 和 x 之间的大小差距进行数组分隔,val值小于x的节点,位于左边,大于和等于则位于整个链表的右边。
而且还有一个要求: 不能是 “无序的”,按照原有相对位置。
什么意思呢?假设 x == 3 , 第一个 节点的值 是 1,小于x值,而且本身就位于左边,我们就不用去移动它的位置了。这就是题目中 的 保留每个节点的初识相对位置,
再换一个说法 : 看到上面那个图中的 val 为 2 的节点没?它 和 val值为1的节点 ,val值都小于 x值(3),位于 链表的左边,但是由于它原先就位于 1 的右边,那么“分隔”后的结果 这个2节点 应该在 1 节点的后面。
这就是 保留 每个节点的初识相对位置。
解题思维
建立 两个傀儡头节点 small 和 large,small 用来连接 val 值小于x的节点,large 用来连接 val 值大于或等于的节点。
再为 small 和 large 两个头节点创建2个替身变量 smallHead 和 largeHead,让它们记住small 和 large 的头节点的位置,让small 和 large 去 连接/遍历 各自的链表。(嗯。好像对 small 和 large 不厚道,谁让新建的两个节点引用带个 头head 呢? 嗯 ,没错!是这样的。)
代码
class Solution
public ListNode partition(ListNode head, int x)
ListNode small = new ListNode();
ListNode smallHead = small;
ListNode large = new ListNode();
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;
附图
以上是关于LeetCode- 86 -分隔链表 - Java - 细喔的主要内容,如果未能解决你的问题,请参考以下文章
算法千题案例每日LeetCode打卡——86.根据二叉树创建字符串
LeetCode笔记:Biweekly Contest 86