如何在c ++中删除链表的第一个节点

use*_*893 2 c++ linked-list

我一直在尝试从单个链表中删除第一个节点.我做的是如下

  • 创建指向头节点的临时节点
  • 将头部移动到下一个节点
  • 释放临时节点并返回头部

生成一个简单的链表后: 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;
}
Run Code Online (Sandbox Code Playgroud)

unx*_*nut 5

你需要改变你的召唤方式Delete.它应该是

head = Delete ( head );
Run Code Online (Sandbox Code Playgroud)

你有你的代码的方式,分配headhead->next和调用Deletehead->next,