分隔链表--均分链表指针返回

Posted C_YCBX Py_YYDS

tags:

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


题目


OJ平台

解题分析

均分,再均分就行。

  • 拓展:
    可以用数组记录每个链表的指针,然后能够快速进行操作。

解题代码

我的蹩脚代码

class Solution {
public:
    vector<ListNode*> splitListToParts(ListNode* head, int k) {
        int n = count(head);
        int c = n/k; int remainder = n%k;
        vector<int>cap(k,c);
        int index = 0;
        while(remainder){
            cap[index%k] += 1;
            index++;
            remainder--;
        }
        int cnt = 0,sum = cap[0];
        vector<ListNode*>res;
        res.push_back(head);
        ListNode* t = head;
        while(cnt!=k-1){ 
            if(sum>0)
            sum--;
            if(sum==0){
                cnt++;
                ListNode* temp = t;
                if(temp){
                t = temp->next;
                temp->next = nullptr;
                }
                res.push_back(t);
                sum += cap[cnt];
            }
            else if(t){
                t = t->next;
            }

        }
        return res;
    }
    int count(ListNode* head){
        if(!head)
            return 0;
        return count(head->next)+1;
    }
};

官方yyds代码

class Solution {
public:
    vector<ListNode*> splitListToParts(ListNode* head, int k) {
        int n = 0;
        ListNode *temp = head;
        while (temp != nullptr) {
            n++;
            temp = temp->next;
        }
        //由于链表被分为k份,而remainder是n%k,肯定小于k,所以每一份最多加上1.
        int quotient = n / k, remainder = n % k;

        vector<ListNode*> parts(k,nullptr);
        ListNode *curr = head;
        for (int i = 0; i < k && curr != nullptr; i++) {
            parts[i] = curr;
            int partSize = quotient + (i < remainder ? 1 : 0); //计算每一份的长度
            for (int j = 1; j < partSize; j++) {
                curr = curr->next; //跳转到需要更改的指针处
            }
            ListNode *next = curr->next; //修改指针隔开
            curr->next = nullptr;
            curr = next;
        }
        return parts;
    }
};

以上是关于分隔链表--均分链表指针返回的主要内容,如果未能解决你的问题,请参考以下文章

2020-11-03:手写代码:链表如何快速找到中间节点?

LeetCode#86-分隔链表

LeetCode:86. 分隔链表(python3)

返回中间节点;返回倒数k节点;判断是否为环形链表(返回入环第一个节点)

返回中间节点;返回倒数k节点;判断是否为环形链表(返回入环第一个节点)

LeetCode Algorithm 86. 分隔链表