0

这是在 C++ 中实现单链表的代码。正在执行三个基本操作,即插入、删除和显示。数据从主函数传递。代码得到编译,但在执行过程中显示“分段错误”。请告诉我代码有什么问题。

#include<iostream>
using namespace std;
class list
{
    private:
        typedef struct node
        {
            int data;`
            node* next;
        }* nodeptr;
        nodeptr head;
        nodeptr curr;
        nodeptr temp;
    public:
        list();
        void insert(int addData);
        void delet(int delData);
        void display();
};
list::list()
{
    head=NULL;
    curr=NULL;
    temp=NULL;
}
void list::insert(int addData)
{
    nodeptr n=new node;
    n->next=NULL;
    n->data=addData;
    if(head!=NULL)
    {
        curr=head;
        while(curr!=NULL)
        {
            curr=curr->next;
        }
        curr->next=n;
    }
        else
    {
        head=n;
    }
}    
void list::delet(int delData)
{
    nodeptr delptr=NULL;
    temp=head;
    curr=head;
    while(curr!=NULL&&curr->data!=delData)
    {
        temp=curr;
        curr=curr->next;
    }
    if(curr==NULL)
    {
        cout<<"Data not found.";
        delete delptr;
    }
    else
    {
        delptr=curr;
        curr=curr->next;
        temp->next=curr;
        delete delptr;
    }
}
void list::display()
{
    curr=head;
    while(curr!=NULL)
    {
        cout<<"\n"<<curr->data;
        curr=curr->next;
    }
}
int main()
{
    list l;
    l.insert(1);
    l.insert(2);
    l.insert(3);
    l.insert(4);
    l.insert(5);
    l.display();
    cout<<"\nDeleting:";
    l.delet(3);
    l.display();
    l.delet(5);
    l.display();
    return 0;
}
4

1 回答 1

3

问题在于插入功能:

curr=head;

while(curr!=NULL)
{
    curr=curr->next;
}
curr->next=n;

达到 curr 为 null 后,您正在访问它。它应该是:

curr=head;

while(curr->next !=NULL)
{
    curr=curr->next;
}
curr->next=n;
于 2013-10-17T12:12:41.117 回答