我一直在尝试从单个链表中删除第一个节点 . 我做的是如下
-
创建指向头节点的临时节点
-
将头部移动到下一个节点
-
释放临时节点并返回头部
生成一个简单的链表后: 1 - > 2 -> 3 -> 4 -> 5
并调用我的方法删除第一个节点,结果是不正确的 . 它返回以下链表: 0 -> 2 -> 3 -> 4 -> 5
我不明白为什么 0
仍然存在 .
#include <cstdlib>
#include <iostream>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
Node* Delete(Node *head)
{
Node* temp = head;
head = head->next;
delete temp;
return head;
}
int main(void) {
Node* head = new Node();
Node* temp = head;
for(int i=1; i<=5; i++)
{
Node* newNode = new Node();
newNode->data = i;
newNode->next = NULL;
temp->next = newNode;
temp = newNode;
}
Delete( head = head->next );
while(head != NULL)
{
cout<<head->data<<" ";
head = head->next;
}
cout<<endl;
return 0;
}
2 回答
此外,删除调用是错误的,你混合新的和免费管理动态内存,因为人们之前说过,你有一个0值,因为初始列表是0 - > 1 - > 2 - > 3 - > 4 - > 5 . 你开始没有任何初始值,并且头部 - >数据为0 .
您需要更改调用
Delete
的方式 . 它应该是您拥有代码的方式,将
head
分配为head->next
并在head->next
上调用Delete
,