Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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++ 链表显示功能不支持';t显示所有节点,并表示下一个节点为空_C++_Linked List - Fatal编程技术网

C++ 链表显示功能不支持';t显示所有节点,并表示下一个节点为空

C++ 链表显示功能不支持';t显示所有节点,并表示下一个节点为空,c++,linked-list,C++,Linked List,输出: 初始4节点列表包含: 头指针=17357680 节点#1:项目=20;Next=00000000 我不知道我是否正确连接了节点,因为它没有显示总共4个节点中的下一个。我见过其他程序员添加一个尾部节点;需要一个吗?这会让事情变得更容易吗?我是否在for循环中正确连接了节点?我是新手,在阅读了大量文档、youtube视频和过去的问题后,我迷路了 #include <iostream> template<class T> class Node { private:

输出:

初始4节点列表包含:

头指针=17357680 节点#1:项目=20;Next=00000000

我不知道我是否正确连接了节点,因为它没有显示总共4个节点中的下一个。我见过其他程序员添加一个尾部节点;需要一个吗?这会让事情变得更容易吗?我是否在for循环中正确连接了节点?我是新手,在阅读了大量文档、youtube视频和过去的问题后,我迷路了

#include <iostream>

template<class T>
class Node
{
private:
    T        item;
    Node<T>* next;
public:
    Node();
    Node(const T& anItem);
    Node(const T& anItem, Node<T>* nextNodePtr);
    void setItem(const T& anItem);
    void setNext(Node<T>* nextNodePtr);
    T getItem() const;
    Node<T>* getNext() const;
};

template<class T>
Node<T>::Node() : next(nullptr)
{}

template<class T>
Node<T>::Node(const T& anItem) : item(anItem), next(nullptr)
{}

template<class T>
Node<T>::Node(const T& anItem, Node<T>* nextNodePtr) : item(anItem), next(nextNodePtr)
{}

template<class T>
void Node<T>::setItem(const T& anItem)
{
    item = anItem;
}

template<class T>
void Node<T>::setNext(Node<T>* nextNodePtr)
{
    next = nextNodePtr;
}

template<class T>
T Node<T>::getItem() const
{
    return item;
}

template<class T>
Node<T>* Node<T>::getNext() const
{
    return next;
}

template <class T>
void display(Node<T> *hdptr)
{
    Node<T>* curr = hdptr;
    while (curr != nullptr)
    {
        int count = 0;
        count++;
        std::cout << "Node #" << count << ": Item = " << curr->getItem() << "; Next = " << curr->getNext() << std::endl;
        curr = curr->getNext();
    }
}

int main()
{
    Node<int>* hdptr = nullptr, *tmp = new Node<int>, *n = new Node<int>;

    int const nodes = 4;
    for (int i=0, num=20; i<nodes; ++i, num+=10)
    {
        n = new Node<int>;
        n->setItem(num);
        tmp = n;

        if (hdptr==nullptr)
        {
            hdptr = n;
        }
        else
        {
            tmp->setNext(n);
        }
    }

    std::cout << "The intial 4-node list contains: " << std::endl;
    std::cout << "\nHead pointer = " << int(hdptr) << std::endl;
    display(hdptr);
}
#包括
样板
类节点
{
私人:
T项;
节点*下一步;
公众:
Node();
节点(常数T和anItem);
节点(const T&anItem,Node*nextNodePtr);
无效设置项(常数T&A项);
void setNext(节点*nextNodePtr);
T getItem()常量;
节点*getNext()常量;
};
样板
Node::Node():下一个(nullptr)
{}
样板
Node::Node(const T&anItem):项(anItem),下一个(nullptr)
{}
样板
节点::节点(常数T&anItem,节点*nextNodePtr):项(anItem),下一个(nextNodePtr)
{}
样板
void节点::setItem(常量T和anItem)
{
项目=项目;
}
样板
void节点::setNext(节点*nextNodePtr)
{
next=nextNodePtr;
}
样板
T节点::getItem()常量
{
退货项目;
}
样板
Node*Node::getNext()常量
{
下一步返回;
}
样板
无效显示(节点*hdptr)
{
节点*curr=hdptr;
while(curr!=nullptr)
{
整数计数=0;
计数++;
想想这个

tmp = n;
紧接着

tmp->setNext(n);
由于
tmp
==
n
实际上您正在这样做

n->setNext(n);
这显然是错误的


是否需要尾部节点指针?这取决于您试图添加节点的位置。如果您试图将它们添加到列表的末尾,则需要尾部节点指针,以便方便地访问列表的末尾。但如果您试图将新节点添加到列表的前面,则尾部指针只会使事情变得复杂。

 tmp=n;
后跟
tmp->setNext(n);
。可能不是您想要的。