我正在编写一个函数,该函数在单链链表中插入一个新元素。

该函数接受列表的* head,将要放置在新元素中的数据和l-list中的位置插入。

如果我不太清楚的话,This是编程练习的链接。

以下代码可以完美运行-

/*
  Insert Node at a given position in a linked list
  head can be NULL
  First element in the linked list is at position 0
  Node is defined as
  struct Node
  {
     int data;
     struct Node *next;
  }
*/

Node* InsertNth(Node *head, int data, int position)
{
    //Takes head of list as input and returns it after inserting a new element
    //with `data` at `position` in the l-list

    Node *temp = new Node;
    temp = head;
    Node *newn = new Node;
    newn->data = data;

    if(position == 0){
        newn->next = head;
        return newn;
    }

    while(--position){
        temp = temp->next;
    }
    newn->next = temp->next;
    temp->next = newn;

    return head;
}

但是,我不明白为什么必须使用Node *temp = new Node; temp = head;

为什么不简单地使用Node *temp = head;起作用?
我仅使用temp指针遍历l-list,以便在返回最终列表时可以保留头部的位置。

编辑-我知道Node *temp = head;是解决之道。这也是我最初编写程序的方式,但是我忘了提到这是给我带来段错误的原因。当我将其更改为Node *temp = new Node; temp = head;时,它适用于所有测试用例(包括head为NULL的那些用例)。

我想知道的是为什么这种看似荒谬的mem分配似乎必须使其起作用。

最佳答案

您上面发布的代码泄漏。

Node *temp = new Node; temp = head;

不好
Node *temp = head;

这个更好。

您的代码中还有其他问题。但是您认为对new很愚蠢然后立即重新分配指针的分析是正确。发现得好。

关于c++ - 是否有必要使用 'new'将新的指针分配给与先前存在的指向同一结构的指针相同的结构?如果是这样,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38381342/

10-16 20:48