[LeetCode]86. 分隔链表(java实现)链表快排

[LeetCode]86. 分隔链表(java实现)链表快排

  • 1. 题目
  • 2. 读题(需要重点注意的东西)
  • 3. 解法
  • 4. 可能有帮助的前置习题
  • 5. 所用到的数据结构与算法思想
  • 6. 总结

1. 题目

[LeetCode]86. 分隔链表(java实现)链表快排_第1张图片
[LeetCode]86. 分隔链表(java实现)链表快排_第2张图片

2. 读题(需要重点注意的东西)

思路:
类似于二分,开辟两个链表,分别存储左边的点和右边的点,最后将两个链表连接起来即可。

以链表 1 -> 4 -> 3 -> 2 -> 5 -> 2,x = 3为例:
[LeetCode]86. 分隔链表(java实现)链表快排_第3张图片
注意:rt最后需要将rt.next置为null,否则会产生环

3. 解法

---------------------------------------------------解法---------------------------------------------------

/**
 * Definition for singly-linked list.
 * 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; }
 * }
 */
class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode lh = new ListNode(-1),rh = new ListNode(-1);
        ListNode lt = left,rt = right;
        for(ListNode p = head;p != null;p = p.next){
            if(p.val < x) lt = lt.next = p;
            else rt = rt.next = p;
        }
        lt.next = rh.next;
        rt.next = null;
        return lh.next;
    }
}

可能存在的问题:

4. 可能有帮助的前置习题

  • [AcWing]785. 快速排序(C++实现)模板题

5. 所用到的数据结构与算法思想

  • 快排

6. 总结

链表的快排,创建两个虚拟头结点来分别存储左边的节点和右边的节点即可,注意right最后要置为null,否则可能会产生环

你可能感兴趣的:(LeetCode深度解析,leetcode,java,算法)