C++ 删除线性链表的第一个节点
我遇到了以下用于删除链接列表第一个节点的代码:C++ 删除线性链表的第一个节点,c++,linked-list,C++,Linked List,我遇到了以下用于删除链接列表第一个节点的代码: Node* removeFirstNode(struct Node* head) { if (head == NULL) return NULL; // Move the head pointer to the next node Node* temp = head; head = head->next; delete temp; return head; }
Node* removeFirstNode(struct Node* head)
{
if (head == NULL)
return NULL;
// Move the head pointer to the next node
Node* temp = head;
head = head->next;
delete temp;
return head;
}
谁能给我解释一下:
temp
指针,因为在重新分配head
后,需要使用delete
释放链表中第一个节点的内存。这可以防止在调用函数时发生错误
head=head->next
将链表的开头移动到第二个节点,然后删除第一个节点
Node*temp=head
使temp
指向与head
相同的地址,但在重新赋值head
后(参见第2点),指针不再指向相同的地址
head
是指向链表开头的指针
temp
不是Node**
类型,但是head
被重新分配(参见第3点)
回答得很好,但我无法理解第五部分,即为什么temp从来都不是“Node**”类型。另外,不使用temp指针是否可以释放磁头的内存?@proglove为什么
temp
应该是Node**
类型?请解释一下你认为它是双指针的理由。那么我就更容易解释原因,为什么它不是Node**
@proglove类型,以及关于你的第二条评论。如果没有temp
,我不认为有一种简单的方法可以释放第一个节点的内存,但我会让你知道,如果我将来偶然发现一种更简单的方法。因为temp指向head,head指向链表的第一个元素,因此我认为它应该是一个双指针。