我重新发布这个,因为之前好像不太清楚。我写了一段代码来反转一组 k 中的链表。例如,如果列表是 {1,2,3,4,5) 并且 k=2,那么输出应该是 {2,1,4,3,5} 但我的代码的输出是 {2,1} .它看起来就像我只反转了第一个 k 组并且不知何故失去了与剩余列表的连接。 请注意,主函数(或函数调用堆栈)从名为“reverseKGroup”的最底部函数开始。
class Solution {
public:
ListNode* Reverse(ListNode*head, ListNode*Tail, ListNode*NewHead, int k)
{
if(head == nullptr || head->next == nullptr)
return head;
ListNode* Hopper = NewHead;
ListNode* Prev = head;
ListNode* curr;
for(int i=0; i<k && Prev != nullptr; i++)
{
curr = Prev->next;
Prev->next = Hopper;
Hopper = Prev;
Prev = curr;
}
NewHead = Hopper;
return NewHead;
}
ListNode* ReverseInk(ListNode* head, ListNode* Tail, int k, ListNode* NewHead)
{
if(Tail == nullptr)
return nullptr;
for(int i=0; i<k-1 && Tail->next != nullptr; i++)
Tail = Tail->next;
ReverseInk(Tail->next,Tail->next,k,NewHead);
NewHead = Reverse(head, Tail, NewHead, k);
return NewHead;
}
ListNode* reverseKGroup(ListNode* head, int k) {
return ReverseInk(head,head,k, nullptr);
}
};
预期输出:{2,1,4,3,5} 我的输出:{2,1}
请提供一个实际的解决方案,而不是说一些笼统的话,比如“你应该把 {} 放在“if”语句之后,即使它是一行”。请帮助我找到代码不起作用的真正原因:)