86. 分隔链表

Posted 飞上天的虫

tags:

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

86. 分隔链表

给你一个链表的头节点 head 和一个特定值x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

提示:

  • 链表中节点的数目在范围 [0, 200]
  • -100 <= Node.val <= 100
  • -200 <= x <= 200

思路:双指针+双链表(值大的放后面,值小的放前面,最后将大值链表指向空,否则产生环)

/**
 * 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 dummyPre = new ListNode(-1);
        ListNode dummyPost = new ListNode(-1);
        ListNode res1 = dummyPre;
        ListNode res2 = dummyPost;
        while (head != null) 
            if (head.val >= x) 
                dummyPost.next = head;
                dummyPost = dummyPost.next;
             else 
                dummyPre.next = head;
                dummyPre = dummyPre.next;
            
            head = head.next;
        
        // 将最大链表的最后一个指向空,不然会产生环,如示例1所示,5又指向了2
        dummyPost.next = null;
        dummyPre.next = res2.next;
        return res1.next;
    

 

刷题17:分隔链表

Leetcode:725. 分隔链表

class Solution {
    public ListNode[] splitListToParts(ListNode head, int k) {
        int len = 0;
        ListNode temp = head;
        while(temp != null){
            len++;
            temp = temp.next;
        }
        ListNode cur = head;
        int size = len / k;
        int mode = len % k;
        ListNode[] res = new ListNode[k];
        for(int i = 0;i < k;i++){
            res[i] = cur;
            int count = mode-- > 0 ? 1 : 0;
            for(int j = 0;j < size + count - 1;j++){
                if(cur != null)
                cur = cur.next;
            }
            if(cur != null){
                ListNode curTemp = cur.next;
                cur.next = null;
                cur = curTemp;
            }
        }
        return res;
    }
}

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

LeetCode#86-分隔链表

链表--分隔链表(leetcode86

LeetCode:86. 分隔链表(python3)

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

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

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