如何将元素附加到链表的末尾

How to append an element to the end of a linked list?

本文关键字:链表 元素      更新时间:2023-10-16

我试着搜索答案,但似乎找不到与我的匹配的答案。我正在为学校做一个模板链接列表,我得到了一个错误的世界。但我现在只想得到一个帮助。我应该在链表的末尾添加一个元素,但我们得到了:

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,否则就会发生坏东西。幸运的是,我确信有一个用于串联的库函数。