无法遍历链表,无法弄清楚我的方法有什么问题?

Not able to traverse linked list, can't figure out whats' wrong in my approach?

    #include<iostream>
    using namespace std;

    struct node{
      int data;                                 // structure for each node of list
      node *p;
    };

    class LinkedList{
      node *head,*tail;
      public:
        LinkedList(){                           //empty LinkedList used for overall structure
            head=NULL;
            tail=NULL;
        }
        void addnode(int x);
        void show();
    };

    void LinkedList::addnode(int x){
     node *temp=new node;
     temp->data=x;
     temp->p=NULL;
     if(head==NULL){                //linkedList is empty therefore temp is both head and tail now
        temp=head;
        temp=tail;
    }
    else{
        tail->p=temp;
        tail=temp;
    }   
   }

    void LinkedList::show(){
       node *temp;
       temp=head;
       while(temp!=NULL){
         cout<<endl<<temp->data<<endl;
         temp=temp->p;
       }
    }

    int main(){
     LinkedList l;
     cout<<"Welcome to Linkedlist creation\n";
     int choice;
     cout<<"To add a node press 1,\nTo view your list press 2\n";
     cin>>choice;
      switch(choice){
        case 1:
            int data;
            cout<<"Enter the data to be added: ";
            cin>>data;
            l.addnode(data);
            break;
        case 2:
            l.show();
    }
  }

请告诉我我的代码有什么问题..!我需要了解我的方法有什么问题...... 我参考了许多其他来源,大多数与我的来源相同,但 show() 根本不起作用...... 请不要直接转到其他帖子或请在这样做之前告诉我我的错误..

已编辑: 对不起大家打字错误,我的意思是一样的 if(head==null) 和 not =; 我检查了我的代码是否相同,只是这里错了,仍然是同样的问题

您的 LinkedList::addnode 有以下错误:

  • if(head=NULL){中的条件错误。 = 是 C++ 中的赋值运算符,它会将 head 设置为 NULL,并将计算为 false。这将有 tail->p=temp;tail = NULL,这将导致分段错误。
  • temp=head; temp=tail;也是错误的。它正在用某些东西覆盖指向新创建节点的指针,造成内存泄漏。

函数应该是:

    void LinkedList::addnode(int x){
     node *temp=new node;
     temp->data=x;
     temp->p=NULL;
     if(head==NULL){             //linkedList is empty therefore temp is both head and tail now
        head=temp;
        tail=temp;
     }
     else{
         tail->p=temp;
         tail=temp;
     }
    }

另外你的classLinkedList不跟在The Rule of Three之后,所以复制对象时指针也被复制,这可能会引起麻烦。多开发程序要小心

还有一点就是你的main()只能做节点插入和打印其中之一,所以你不能打印添加节点的LinkedList。 您可能需要这样的循环:

int main(){
 LinkedList l;
 cout<<"Welcome to Linkedlist creation\n";
 int choice;
 for(;;){
  cout<<"To add a node press 1,\nTo view your list press 2\n";
  if(!(cin>>choice))break; // exit when reading failed
  switch(choice){
    case 1:
        int data;
        cout<<"Enter the data to be added: ";
        cin>>data;
        l.addnode(data);
        break;
    case 2:
        l.show();
  }
 }
}