我正在学习c ++。我正在创建一个链表数据结构。显示结构中节点值的其中一个函数不起作用。由于某种原因,遍历节点的while循环在display函数中不起作用,因此我无法看到这些节点中的值。有谁看到问题是什么?我一直盯着代码一段时间,不知道这里有什么问题。 感谢您的帮助。 部首:
// linklist.h
// class definitions
#ifndef LINKLIST_H
#define LINKLIST_H
class linklist
{
private:
// structure containing a data part and link part
struct node
{
int data;
node *link;
}*p;
public:
linklist();
void append(int num);
void addatbeg(int num);
void addafter(int loc, int num);
void display();
int count();
void del(int num);
~linklist();
};
#endif
.cpp file
// LinkedListLecture.cpp
// Class LinkedList implementation
#include"linklist.h"
#include<iostream>
using namespace std;
// initializes data member
linklist::linklist()
{
p =NULL;
}
// adds a node at the end of a linked list
void linklist::append(int num)
{
node *temp, *r;
// if the list is empty, create first node
if(p==NULL)
{
temp = new node;
temp->data = num;
temp->link = NULL;
}
else
{
// go to last node
temp = p;
while(temp->link!=NULL)
temp = temp->link;
// add node at the end
r = new node;
r->data=num;
r->link=NULL;
temp->link=r;
}
}
// displays the contents of the linked list
void linklist::display()
{
node *temp = p;
cout<< endl;
// traverse the entire linked list
while(temp!=NULL) // DEBUG: the loop doesn't work
{
cout<<temp->data<<" ";
temp = temp->link;
}
void main()
{
linklist l;
l.append(14);
l.append(30);
l.append(25);
l.append(42);
l.append(17);
cout<<"Elements in the linked list:";
l.display(); // this function doesn't work
system("PAUSE");
}
答案 0 :(得分:4)
您永远不会将p设置为非NULL值。
if(p==NULL)
{
p = new node;
p->data = num;
p->link = NULL;
}
答案 1 :(得分:1)
我认为GWW已经强调了这个问题,但是学习如何编程来学习如何识别错误。
如果你做了某些事情并且没有得到预期的结果,你可以:
通过编写链接列表来学习编写C ++就像通过添加1 + 1来学习数学一样。它是老式的思维,缓慢而且在没有任何上下文的情况下很无聊。 数学不算,就像C ++编程不是指针操作。在某些阶段你可能需要了解它,但最好还是学习其他重要的东西,比如stl和boost。
如果理解append()
创建了某些内容,请找到列表的末尾,添加它。你可以看到,在你追加函数中你创建了一些混合uyp并移动到列表的末尾,但是你从不添加它。