如何将元素附加到链表的末尾
How to append an element to the end of a linked list?
我试着搜索答案,但似乎找不到与我的匹配的答案。我正在为学校做一个模板链接列表,我得到了一个错误的世界。但我现在只想得到一个帮助。我应该在链表的末尾添加一个元素,但我们得到了:
append(ListNode)
起初,我想:"好吧,创建一个新节点,然后在后面插入……"但我仔细阅读了一遍,我有另一个函数,我必须将两个链表连接在一起。因此,我认为我必须在链表中添加一个已经生成的元素。这样,当我执行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;
}
}
但由于这只是附加了一个新节点,我不能使用它。有没有办法附加一个已经制作好的节点?例如:将另一个链表附加到上一个?
我的concat(与我搜索过的其他concat不同)只使用一个链表。上一个链表对象调用函数,然后附加一个列表
concat(&List)
所以我很困惑。感谢您的帮助!
首先,您需要更改append方法的签名,以便它被传递一个ListNode*
,并且无论它是单个节点还是整个链表,它都会对其进行附加。之后,您的代码应该如下所示:
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;
}
}
我还没有编译它,所以可能会有一些错误,但你明白了。
要将list2连接到list1,您必须将list2的头附加到list1的最后一个节点并更新lastPtr,类似于以下内容:
//apart from checking for basic sanity like empty list and things
// suppose argument passed is ListNode list2
ListNode<NODETYPE> *tempPtr = lastPtr;
tempPtr->nextPtr=list2;
tempPtr = list2;
while(tempPtr->next != NULL) {
tempPtr = tempPtr->next;
}
lastPtr = tempPtr;
return true;
连接列表的确切步骤取决于特定的实现细节。最简单的情况是一个单独链接的列表,在这种情况下,您只需将第二个头链接到旧的尾部。如果你有一个尾部指针,记得更新它。对于双链接列表,您还必须将第二个头链接回旧尾巴。如果你正在使用一个重要节点,记得也要注意这一点。
编辑:忽略了这一点,我很困惑,以为你可能在尝试使用标准列表。
在C++中,std::list
是一个带有sentinel节点的双链表,这使得串联变得不平凡。此外,无论如何,你都不应该搞砸内部。如果你想使用一个标准的容器,你需要遵守它的公共API,否则就会发生坏东西。幸运的是,我确信有一个用于串联的库函数。
- 打印所有链表的元素 (C++)
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 在链链表中手动插入第五个元素
- 将数组的元素添加到链表中
- 为什么我在尝试在单向链表中打印元素时会出现这个永无止境的循环
- 如何将元素附加到链表?
- 仅显示链表的最后一个元素
- 从 c++ 中的链表中获取元素
- C++删除链表中的元素
- 我正在尝试计算链表中当前元素的数量
- 为什么将函数的返回类型从结构节点*更改为void后,链表的元素没有显示create_ll和显示?
- 如何从几乎排序的链表中分离放错位置的元素?
- 如何比较链表的元素?
- 链表 - 元素在删除后出现
- C++链表最后一个元素的迭代器?
- 如何找到双向链表的最大元素?
- 在间隔树中插入链表元素
- 使用递归打印链表元素
- 重新排列链表元素
- c++分割错误链表元素添加