带节点的链表 我尝试用链表制作一个链表,用C++测试它。我创建了六个节点,然后像这样前后打印它们:
main.cpp带节点的链表 我尝试用链表制作一个链表,用C++测试它。我创建了六个节点,然后像这样前后打印它们:,c++,linked-list,nodes,C++,Linked List,Nodes,main.cpp #include "LinkedList.h" #include <iostream> #include <string> #include <sstream> using namespace std; void TestAddHead(); int main() { TestAddHead(); system("pause"); return 0; } void TestAddHead() { co
#include "LinkedList.h"
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void TestAddHead();
int main()
{
TestAddHead();
system("pause");
return 0;
}
void TestAddHead()
{
cout << "Testing AddHead()" << endl;
LinkedList<int> data;
for (int i = 0; i < 12; i += 2)
data.AddHead(i);
cout << "Node count: " << data.NodeCount() << endl;
cout << "Print list forward:" << endl;
data.PrintForward();
cout << "Print list in reverse:" << endl;
data.PrintReverse();
}
#包括“LinkedList.h”
#包括
#包括
#包括
使用名称空间std;
无效测试头();
int main()
{
TestAddHead();
系统(“暂停”);
返回0;
}
void TestAddHead()
{
可能是您的直接问题,您从未将新节点上一个指针设置为nullptr
(这个问题应该通过更好地构造循环和/或为节点设置合适的构造函数来纠正)。不管怎样,这里
template<typename T>
void LinkedList<T>::AddHead(const T &data)
{
Node* newNode = new Node;
newNode->data_ = data;
if (count == 0)
{
head = newNode;
tail = newNode;
head->next = nullptr;
head->previous = nullptr;
}
else
{
newNode->next = head;
newNode->previous = nullptr; // ADD THIS
head->previous = newNode;
head = newNode;
}
count = count + 1;
}
但坦率地说,这只是混淆了你在做什么。你总是把你的新节点放在列表的最前面,所以前面提到的成员总是nullptr
(至少在你开始研究循环列表之前).请提取一个。这可能只是一个没有任何模板代码的文件。这实际上是网站规则所要求的,因为在许多情况下,这已经允许您自己查找错误。但是,请考虑在程序结束时发生的情况:析构函数。确保这些工作正常。此外,您还可以使用一项技能,即stepp使用调试器检查代码。对此进行一些研究并学习,这是任何程序员都必须具备的技能。为什么要反向循环直到看到空指针?列表中的第一个节点是nullptr
?在编写代码之前,在实现链表时,最好使用方框作为数据在纸上绘制列表a、 同样,如果你要在纸上画出你正在做的事情,那么这个“反向”循环对你有意义吗(即何时停止循环)?
template<typename T>
void LinkedList<T>::AddHead(const T &data)
{
Node* newNode = new Node;
newNode->data_ = data;
if (count == 0)
{
head = newNode;
tail = newNode;
head->next = nullptr;
head->previous = nullptr;
}
else
{
newNode->next = head;
newNode->previous = nullptr; // ADD THIS
head->previous = newNode;
head = newNode;
}
count = count + 1;
}
newNode->previous = head->previous;