我已经尝试搜索答案,但似乎找不到任何符合我的答案。我正在为学校做一个模板链表,但我遇到了很多错误。但我现在只需要一个帮助。我应该将一个元素 append 到链表的末尾,但我们得到:
append(ListNode)
起初,我想:“好吧,创建一个新节点,然后在后面插入……”但我仔细阅读了它,我必须创建另一个函数,将两个链表连接在一起。所以我想我必须在链表上 append 一个已经制作好的元素。这样当我进行 concat 时,我可以使用我的追加来 append 两者。或者至少……这只是我的想法……
所以一开始,我做了:
template<typename NODETYPE>
bool List<NODETYPE>::append(NODETYPE &value)
{
ListNode<NODETYPE> *newPtr = getNewNode(value); //creates new node
if(isEmpty()) //checks if list is empty
{
firstPtr = lastPtr = newPtr;
return true;
}
else //inserts new node at end of list
{
ListNode<NODETYPE> *tempPtr = lastPtr;
tempPtr->nextPtr=newPtr;
lastPtr = newPtr;
return true;
}
}
但是因为这只是 append 了一个新节点,所以我不能使用它。有没有办法 append 一个已经创建的节点?例如:将另一个链表 append 到前一个链表?
我的连接(与我搜索过的其他连接不同)只使用一个链表。之前的链表对象调用函数,然后附上一个列表
concat(&List)
所以我很困惑。感谢您的帮助,谢谢!
最佳答案
首先,您需要更改 append 方法的签名,以便将 ListNode*
传递给它并 append 它,无论它是单个节点还是整个链表。之后,您的代码应如下所示:
template<typename NODETYPE>
bool List<NODETYPE>::append(ListNode<NODETYPE>* newPtr)
{
//ListNode<NODETYPE> *newPtr = getNewNode(value); //creates new node
if(isEmpty()) //checks if list is empty
{
firstPtr = lastPtr = newPtr;
return true;
}
else //inserts new node at end of list
{
ListNode<NODETYPE> *tempPtr = lastPtr;
tempPtr->nextPtr=newPtr;
lastPtr = newPtr;
while(lastPtr->nextPtr != NULL)
lastPtr = lastPtr->nextPtr;
return true;
}
}
我还没有编译它,所以可能会有一些错误,但你明白了。
关于c++ - 如何将元素 append 到链表的末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506022/