c++ - 这个链表的实现有什么问题?

标签 c++ linked-list

这是我用 C++ 创建单向链表的代码。

函数 del_alt() 删除从第二个元素开始的每个备用元素。

编译器没有给出这样的错误,但在运行过程中程序在显示原始列表后突然终止。

我已尽力找出可能的错误,但找不到。

感谢帮助。

干杯。

    #include<iostream>

using namespace std;
class Node 
{
    public:
        Node()
        {
            next=0;
        }
        Node *next;
        int info;

};

class List
{
    private:
        Node *head,*tail;
    public:
        List()
        {
            head=0;
            tail=0;
        }
    void  del_alt();
    void add_to_head(int);
    void show_list();
};


void List :: del_alt()
{
  if(!head||(head==tail))
    return;
  else
   {
      Node *current,*after,*ptr;
      for(current=head,after=head->next;current!=0;current=current->next,after=current->next)
      {
        ptr=after;
        current->next==after->next;
        if(ptr==tail)
            tail=current;
        delete ptr; 
      }
    }
}

void List :: add_to_head(int el)
{
    Node *ptr;
    ptr->info=el;
    if(!head)
        {
            ptr->next=0;
            head=tail=ptr;
        }   
    else
        {
            ptr->next=head;
            head=ptr;
        }
}

void List::show_list()
{   Node *ptr;
    cout<<"\n\n";
    ptr=head;
    while(ptr!=0)
    {
        cout<<"\t"<<ptr->info;
        ptr=ptr->next;
    }
}   
int main()
{
    List l;
    int el;
    char ch;
    cout<<"\n\n\t\t enter elements\n\n\t";
    do
    {
        cin>>el;
        l.add_to_head(el);
        cout<<"\n\t want to enter more ? (y/n) \n";
        cin>>ch;
    }while(ch=='y'||ch=='Y');

    cout<<"\n\t Original list -> \n";
    l.show_list();
    l.del_alt();
    cout<<"\n\t After deletion -> \n";
    n.show_list();
    cout<<"\n\n \\===============================================";
}

最佳答案

问题出在add_to_head方法中没有初始化ptr。

Node *ptr;
ptr->info=el

至少ptr应该是一个新分配的cell

Node *ptr = new Node;
ptr->info=el

关于c++ - 这个链表的实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38878527/

相关文章:

C# 和 C++ 库

c - 对看起来不错的函数的 undefined reference

java - 链表迭代器抛出并发修改异常

c++ - 找不到成员函数的标识符

javascript - QML 报告 ReferenceError : XYZ is not defined on C++ object added to context

c++ - 当包含它的对象调用其析构函数时,unique_ptr 是否未分配?

c++ - 为 UDP 网络打包消息

c++ - 移除栈中的空元素

java - 按字母顺序对名称链接列表进行排序

c++ - std::thread::join 何时会因 no_such_process 而失败