Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带节点的链表 我尝试用链表制作一个链表,用C++测试它。我创建了六个节点,然后像这样前后打印它们:_C++_Linked List_Nodes - Fatal编程技术网

带节点的链表 我尝试用链表制作一个链表,用C++测试它。我创建了六个节点,然后像这样前后打印它们:

带节点的链表 我尝试用链表制作一个链表,用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

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()
{
    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;