无法打印链表的第一个元素

时间:2017-07-01 09:10:18

标签: c++ linked-list

我创建了这个c ++程序来创建一个链表,但我无法打印列表的第一个元素。 请帮忙

这是我的代码。

#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;

class Node{
    public:
    int data;
    Node* next;
    void Insert(int x);
    void Print();
};
Node* head;

void Node::Insert(int x){
    Node* temp=new Node();
    temp->data=x;
    temp->next=head;
    head=temp;
}

void Node::Print(){
    Node* temp=head;
    cout<<"List is "<<endl;
    while(temp->next!=NULL){
        cout<<temp->data<<"  ";
        temp=temp->next;
    }
    cout<<endl;
}

int main(){
    head=NULL;
    Node q;
    cout<<"Enter number of elements"<<endl;
    int n;
    cin>>n;
    int x;
    for(int i=0; i<n; i++){
        cout<<"ENter numbeR"<<endl;
        cin>>x;
        q.Insert(x);
        q.Print();
    }
    return 0;
}

除第一个元素外,所有元素都打印出来。我不能搞错。

2 个答案:

答案 0 :(得分:0)

在“打印”功能中,将temp->next更改为temp

这是更新的代码,我在输出演示文稿格式中做了很少的修改:

#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;

class Node{
public:
    int data;
    Node* next;
    void Insert(int x);
    void Print();
};
Node* head;

void Node::Insert(int x){
    Node* temp=new Node();
    temp->data=x;
    temp->next=head;
    head=temp;
}

void Node::Print(){
    Node* temp=head;
    cout<<"List is "<<endl;
    while(temp!=NULL){
        cout<<temp->data<<"  ";
        temp=temp->next;
    }
    cout<<endl;
}

int main(){
    head=NULL;
    Node q;
    cout<<"Enter number of elements: ";
    int n;
    cin>>n;
    int x;
    for(int i=0; i<n; i++){
        cout<<"Input node element: ";
        cin>>x;
        q.Insert(x);
        q.Print();
    }
    return 0;
}

答案 1 :(得分:0)

错误在:

while(temp->next!=NULL){

打印时。当列表只有一个元素时,该元素的next属性将为NULL。但是,由于此约束,程序不会进入while循环,因此不会打印它。您可以将其替换为:

来更正此问题
while(temp!=NULL){

然后,将打印每个非null元素,即列表中的所有元素。