ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

k个一组反转链表

k个一组反转链表 和leetcode上原题不同的是,如果最后一组元素构成的子链表长度小于k则一并反转代码如下:#include iostream using namespace std; struct Node { int value; Node* next nullptr; Node(int v) :value(v) {} }; Node *reverseList(Node *head, Node *tail) { Node* tailAfterReverse head-next; while (head-next ! tail) { Node* temp head-next; head-next temp-next; temp-next tail-next; tail-next temp; } return tailAfterReverse; } void reverseListKGroup(Node* head, size_t k) { if (head-next nullptr) return; Node* tail head-next; Node* first head; while (true) { size_t count 1; while (tail-next ! nullptr count k) { tail tail-next; count; } first reverseList(first, tail); if (first-next nullptr) break; tail first-next; } } int main() { const int N 10; size_t k 2; Node* head new Node(-1); Node* tail head; for (int i 1; i N; i) { Node* cur new Node(i); tail-next cur; tail cur; } cout k 个一组反转前: endl; tail head-next; while (tail ! nullptr) { cout tail-value ; tail tail-next; } cout endl; reverseListKGroup(head, k); cout k 个一组反转后: endl; tail head-next; while (tail ! nullptr) { cout tail-value ; tail tail-next; } cout endl; return 0; }
返回列表