链接列表中的错误

Fru*_*der 1 c++

我为链接列表编写了以下代码来创建一个Book的序列号.并搜索它.我正在使用链表.
当我添加我的第一个条目时,它会成功添加,但是当我添加第二个条目时,它会显示分段错误.我无法弄清楚原因.请帮忙.
提前致谢.
码:

#include<iostream>
#include<string>
#include<fstream>
#include<cstdlib>
using namespace std;

struct book
{
  int accno;
  string name;
  book* next;
};



int main()

{
  bool flag=false;
  int x,m;
  string s;
  book* front=NULL;
  book* n;
  do
    {

      cout<<"\nPlease select the following:\n1.Create and append\n2.Search\n3.Exit";
      cin>>m;
      switch(m)
    {
    case 1:
      n=new book();
      cout<<"\nEnter the book name: ";
      cin>>s;
      cout<<"\nEnter the acc no.: ";
      cin>>x;

      if(front==NULL)
        {
          front=n;
        }
      else
        {   n=front;

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

      n->accno=x;
      n->name=s;
      break;


    case 2:
      cout<<"Enter the roll no.";
      int y;
      cin>>y;
      if(front==NULL){cout<<"Doesnot exist\n"; break;
      }

      else
        {
          n=front;
          while(n->accno!=y && n->next!=NULL)
        {
          n->next=n;
        }
          cout<<"Book name is:"<<n->name;
          cout<<"\nAccno is: "<<n->accno;

        }
      break;


    case 3: flag=true;
      break;


    }
    }

  while(flag==false);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 6

这里

while(n->next!=NULL)
{
  n=n->next;
}
n=n->next;
Run Code Online (Sandbox Code Playgroud)

您遍历链接列表以查找最后一个元素,然后单步执行它.在此之后,n将是null.

您缺少的是创建一个新元素并将其附加到列表的末尾.

和这里

n->accno=x;
n->name=s;
Run Code Online (Sandbox Code Playgroud)

您还必须分配n->next = null,否则您的列表将无法正确终止.

此外,在这里搜索书籍时

while(n->accno!=y && n->next!=NULL)
{
  n->next=n;
}
cout<<"Book name is:"<<n->name;
cout<<"\nAccno is: "<<n->accno;
Run Code Online (Sandbox Code Playgroud)

退出循环后,要么你找到了这本书,要么n就是null.在尝试取消引用n之前,您必须检查是哪种情况,否则如果您要查找的书不在列表中,您将再次获得段错误.