-2
我在C++中独立学习列表,并且我已经搜索了许多关于它的网站。但是,几乎每种创建列表的方法都是一样的。
他们通常创建一个struct
作为class
的节点。我想创建一个class
而不使用struct
。于是我创建了一个类名ListNode
,其中包含一个int
数据和一个指针。
我班的主要成员功能是AddNode
和show
。使用自定义链表实现获取错误的输出
虽然这个程序编译成功,但它仍然无法正常工作。
这里是头文件:
#ifndef LISTNODE_H_
#define LISTNODE_H_
#pragma once
class ListNode
{
private:
int data;
ListNode * next;
public:
ListNode();
ListNode(int value);
~ListNode();
void AddNode(ListNode* node,ListNode* headNode);
void show(ListNode* headNode);
};
#endif
这里是实现:
#include "ListNode.h"
#include<iostream>
ListNode::ListNode()
{
data = 0;
next = NULL;
}
ListNode::ListNode(int value)
{
data = value;
next = NULL;
}
ListNode::~ListNode()
{
}
void ListNode::AddNode(ListNode* node,ListNode* headNode) {
node->next = headNode;
headNode =node;
}
void ListNode::show(ListNode* headNode) {
ListNode * traversNode;
traversNode = headNode;
while (traversNode != NULL) {
std::cout << traversNode->data << std::endl;
traversNode = traversNode->next;
}
}
主要功能:
#include"ListNode.h"
#include<iostream>
int main()
{
using std::cout;
using std::endl;
ListNode* head = new ListNode();
for (int i = 0;i < 3;i++) {
ListNode* Node = new ListNode(i);
head->AddNode(Node, head);
}
head->show(head);
return 0;
}
就我而言,输出应该是
但是,输出是单个零。在AddNode
和show
函数中肯定有错误。
你能告诉我这两个功能有什么问题吗?
如果你拿出一些纸和铅笔,并逐步浏览你的代码,一次一行,你会看到问题。或者,如果您的纸张用完了,则可以使用平台的调试器手动逐步执行代码,并查看所有变量的值。这不是一个非常复杂的程序。调试它不需要很长时间。 –
我已经调试过它,但是因为我很安静,新的C++我只知道这两个函数是错误的,但我不知道为什么AddNode函数无法链接列表中的节点。 – Tom
如果你真的调试过它,那么你应该能够回答一个简单的问题:在第一次调用AddNode()之后,以及在第二次调用AddNode()之后,你对head-> next看到了什么值。 –