【问题标题】:inserting node at ith position in linked list recursively递归地在链表中的第 i 个位置插入节点
【发布时间】:2021-04-28 13:01:58
【问题描述】:

会帮助我解决这个问题 我正在尝试使用递归将节点插入到链表中的第 i 个位置

这是代码,请帮助我改进代码 当我必须返回头部时,我最后会特别面临问题,我不知道如何返回

Node* insertNodeRecursively(Node*head, int n, int data)
{
    if(head == nullptr)
    {
        return head;
    }
    else if(n==0)
    {
        Node* newNode= new Node(data);
        newNode->next =  head->next;
        head->next = newNode;
        return head;
    }
  
    Node * x =  insertNodeRecursively(head->next,n-1,data);

    
   
    
}

【问题讨论】:

标签: c++ recursion linked-list


【解决方案1】:

所以我猜你希望函数insertNodeRecursively 返回新的头部,对吧?如果不考虑在调用函数的位置 0 处插入的特殊情况,其他任何方法都将不起作用。

您可以执行以下操作:

if (n == 0) {
    Node *newNode = new Node(data);
    newNode->next = head;
    return newNode;
}

if (head == nullptr) {
    return nullptr;
}

Node *node = insertNodeRecursively(head->next, n - 1, data);
head->next = node;
return head;

这个想法是,当这不是插入的位置时,我们需要假设下一个递归调用可能会给我们一个新的头(从那个位置开始),所以我们需要 head->next = node; 分配。调用作为第一个参数传递的节点head 可能会造成混淆,因为它并不总是列表的头部(仅在递归开始时)!在 n 为 0 的情况下,它是您要插入的节点。您在 n == 0 的情况下所写的问题是您总是返回旧的头,即使您应该返回 newNode。 head 节点应该是 newNode 之后的节点。

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多