我在反转 K 组中的链表时出现错误输出 [关闭]

问题描述 投票:0回答:0

我重新发布这个,因为之前好像不太清楚。我写了一段代码来反转一组 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”语句之后,即使它是一行”。请帮助我找到代码不起作用的真正原因:)

c++ oop linked-list reverse
© www.soinside.com 2019 - 2024. All rights reserved.