这个链表实现有什么问题?

时间:2016-08-10 16:07:41

标签: 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 \\===============================================";
}

1 个答案:

答案 0 :(得分:1)

问题来自add_to_head方法中ptr的非初始化。

Node *ptr;
ptr->info=el

至少ptr应该是一个新分配的单元格

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