Update
This commit is contained in:
parent
da63dcb16b
commit
5f1b40adc4
22
include/s0025_reverse_nodes_in_k-group.hpp
Normal file
22
include/s0025_reverse_nodes_in_k-group.hpp
Normal file
@ -0,0 +1,22 @@
|
||||
#ifndef S0025_REVERSE_NODES_IN_K_GROUP
|
||||
#define S0025_REVERSE_NODES_IN_K_GROUP
|
||||
|
||||
#include <utility>
|
||||
#include <tuple>
|
||||
|
||||
using namespace std;
|
||||
|
||||
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:
|
||||
ListNode* reverseKGroup(ListNode* head, int k);
|
||||
};
|
||||
|
||||
#endif
|
44
src/s0025_reverse_nodes_in_k-group.cpp
Normal file
44
src/s0025_reverse_nodes_in_k-group.cpp
Normal file
@ -0,0 +1,44 @@
|
||||
#include "s0025_reverse_nodes_in_k-group.hpp"
|
||||
|
||||
// 翻转一个子链表,并且返回新的头与尾
|
||||
pair<ListNode*, ListNode*> myReverse(ListNode* head, ListNode* tail) {
|
||||
ListNode* prev = tail->next;
|
||||
ListNode* p = head;
|
||||
while (prev != tail) {
|
||||
ListNode* nex = p->next;
|
||||
p->next = prev;
|
||||
prev = p;
|
||||
p = nex;
|
||||
}
|
||||
return {tail, head};
|
||||
}
|
||||
|
||||
ListNode* Solution::reverseKGroup(ListNode* head, int k) {
|
||||
ListNode* hair = new ListNode(0);
|
||||
hair->next = head;
|
||||
ListNode* pre = hair;
|
||||
|
||||
while (head) {
|
||||
ListNode* tail = pre;
|
||||
// 查看剩余部分长度是否大于等于 k
|
||||
for (int i = 0; i < k; ++i) {
|
||||
tail = tail->next;
|
||||
if (!tail) {
|
||||
return hair->next;
|
||||
}
|
||||
}
|
||||
ListNode* nex = tail->next;
|
||||
// 这里是 C++17 的写法,也可以写成
|
||||
// pair<ListNode*, ListNode*> result = myReverse(head, tail);
|
||||
// head = result.first;
|
||||
// tail = result.second;
|
||||
tie(head, tail) = myReverse(head, tail);
|
||||
// 把子链表重新接回原链表
|
||||
pre->next = head;
|
||||
tail->next = nex;
|
||||
pre = tail;
|
||||
head = tail->next;
|
||||
}
|
||||
|
||||
return hair->next;
|
||||
}
|
Loading…
Reference in New Issue
Block a user