首页 文章

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

提问于
浏览
1

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

  • 创建指向头节点的临时节点

  • 将头部移动到下一个节点

  • 释放临时节点并返回头部

生成一个简单的链表后: 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 回答

  • 4

    此外,删除调用是错误的,你混合新的和免费管理动态内存,因为人们之前说过,你有一个0值,因为初始列表是0 - > 1 - > 2 - > 3 - > 4 - > 5 . 你开始没有任何初始值,并且头部 - >数据为0 .

  • 0

    您需要更改调用 Delete 的方式 . 它应该是

    head = Delete ( head );
    

    您拥有代码的方式,将 head 分配为 head->next 并在 head->next 上调用 Delete

相关问题