我正在编写一个函数,该函数在单链链表中插入一个新元素。
该函数接受列表的* 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/