Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表)
题目描述
已知一个链表,每次对k个节点进行反转,最后返回反转后的链表
测试样例
Input: k = 2, 1->2->3->4->5
Output: 2->1->4->3->5
Input: k = 3, 1->2->3->4->5
Output: 3->2->1->4->5
详细分析
按照题目要求做就行了:比如k=2,首先[1->2->3->4->5]分组为[1->2],[3->4],[5],然后每组反转[2->1],[4->3],[5],最后输出反转后的链表[2->1->4->3->5]。
算法实现
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
if(head==nullptr || k==1){
return head;
}
ListNode * cur = head;
while(true){
partialReverse(cur,k);
for(int i=0;i<k;i++){
cur=cur->next;
if(cur==nullptr){
return head;
}
}
}
}
// it's a closed interval
void partialReverse(ListNode * start,int k){
// 1->2
// 1->2->3->4->5
std::stack<int> vec;
ListNode * temp = start;
for(int i=0;i<k;i++){
vec.push(temp->val);
temp = temp->next;
if(i!=k-1 && temp==nullptr){
return;
}
}
for(int i=0;i<k;i++){
int val = vec.top();
vec.pop();
start->val = val;
start=start->next;
}
}
};