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