链表c ++代码错误

时间:2014-06-07 03:52:45

标签: c++ linked-list

我是C ++的新手。我已经为链表编写了一个C ++代码。在eclipse中运行代码说“linkedlist.exe停止工作”后,我收到一条错误消息。谁能告诉我哪里出错了。在代码中我创建一个链表并在其中插入几个值。然后我写了一个声明来打印元素。

#include<iostream>
#include<cstdlib>
using namespace std;
struct Node
{
    int data;
    Node* P;
};
Node* H;
void Insert(int data)
{
    Node* temp=new Node();
    temp->data=data;
    temp->P=NULL;
    Node* temp1=H;
    while(temp1->P!=NULL)
    {
        temp1=temp1->P;
    }
    temp1->P=temp;
}
int main()
{
    cout<<"linked list"<<endl;
    Insert(1);
    Insert(2);
    Insert(3);
    Node* Print=H;
    while(Print!=NULL)
    {
        cout<<Print->data<<endl;
    }

}

3 个答案:

答案 0 :(得分:1)

// Initialize H.
Node* H = NULL;

void Insert(int data)
{
    Node* temp=new Node();
    temp->data=data;
    temp->P=NULL;

    // If there is nothing in the list, make the new Node the head.
    if ( H == NULL )
    {
       H = temp;
    }
    else
    {
       Node* temp1=H;
       while(temp1->P!=NULL)
       {
          temp1=temp1->P;
       }
       temp1->P=temp;
    }
}

更新

用于打印列表的while lop需要是:

while(Print!=NULL)
{
    cout<<Print->data<<endl;
    Print = Print->P; // Missing in your code.
}

答案 1 :(得分:0)

首先,为变量提供更好的名称。例如,Node* P没有意义,您可以将其命名为next, prev或任何您想让您和其他人理解的内容。您还可以查看naming conventions

其次,我认为insert不起作用。您是要插入第一个,结束还是位置。我会写类似的东西:

void insert(int val, int pos){
     Node newNode = null;
     newNode -> data = val;
     Node temp = H;
     if(pos<0){
         H = newNode;
         H->P = temp;
     }
     else{
         for(int i = 0; i < pos; i++){
              if(temp->P != null)
                   temp = temp->P
              else break;
         }
         //I found the position of the element you supposed to insert
         //You insert the element properly.
         //Make sure that you link the next element to newNode;
     }
}

您可以从this page

学习插入

最后,您的打印输出始终检查第一个元素。 If Print->data != null,您将始终打印列表的第一个元素。

答案 2 :(得分:0)

谢谢大家的帮助。我写了以下内容并且工作得很好。这是一个链表列表代码,用于在列表末尾插入数据值。

#include<iostream>
#include<cstdlib>
using namespace std;
struct Node
{
    int data;
    Node* next;
};
Node* Head;
void Insert(int data)
{
    Node* temp=new Node();
    temp->data=data;
    temp->next=NULL;
    if(Head==NULL)
    {
        Head=temp;
        return;
    }
    Node* temp1=Head;
    while(temp1->next!=NULL)
    {
        temp1=temp1->next;
    }
    temp1->next=temp;

}
int main()
{
    Head=NULL;
    cout<<"linked list"<<endl;
    Insert(1);
    Insert(2);
    Insert(3);
    Node* Print=Head;
    while(Print!=NULL)
    {
        cout<<"data=" <<Print->data<<endl;
        Print=Print->next;
    }

}