1. 程式人生 > 其它 >leetcode-725. 分隔連結串列

leetcode-725. 分隔連結串列

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    int getlistlen(ListNode* head){
        
int n = 0; if(head==NULL) return n; while(head){ n++; head = head->next; } return n; } vector<ListNode*> splitListToParts(ListNode* head, int k) { vector<ListNode*> res; int len = getlistlen(head);
// cout<<"len:"<<len<<endl; int n = len/k; int m = len%k; vector<int> lenlist(k,n); // 初始化有k個段落,每個段落的長度為n for(int i = 0; i < m; i++) // 將多餘的平均分配到前面的每個段落上面 lenlist[i]++; for(auto i:lenlist) cout<<i<<endl; ListNode
* p = head; // p設為每個段落的起點 ListNode* q = head; // q遍歷陣列 int i = 0; while(i<lenlist.size()){ int cnt = 1; while(cnt<lenlist[i]&&q){ q = q->next; cnt++; } ListNode* tmp = q; // 儲存每個段落的最後一個節點,將末尾指向NULL if(q!=NULL) q = q->next; // 將q指向下一個段落的信起點 if(tmp!=NULL) tmp->next = NULL; res.push_back(p); // 將段落的加入 p = q; // 更新下一個段落的起點 i++; // 更新下一個陣列的長度 } return res; } };