【发布时间】:2015-07-22 12:09:07
【问题描述】:
所以我实现了函数 insertEnd 的定义,它在链表的末尾插入一个链表节点。在大多数情况下,它似乎可以独立工作,但是在其他功能(例如连接两个链表)中使用它时我似乎遇到了问题,并且在调用它时控制台上什么也没有显示,所以我什至不能使用断点调试
template <class Object>
void List<Object>::insertEnd(const Object& data) // INSERT: At the end!
{
ListNode<Object> *getToEnd = head;
while (getToEnd->getNext() != nullptr)
getToEnd = getToEnd->getNext();
ListNode<Object>* newnode = new ListNode<Object>(data, NULL);
getToEnd->setNext(newnode);
}
我最初所做的是使用插入到链表开头的不同插入,它有效,但这不是这个新的重载函数应该做的(假设将一个列表附加到另一个),所以我创建了 insertEnd 来尝试使用它。
【问题讨论】:
-
只要
head永远不能是nullptr,就没有什么特别错误的了。也许您使用它有问题? (调用时控制台中不应该显示任何内容,这与断点完全无关。) -
你能详细说明一下ListNode的构造函数中作为NULL传递的第二个参数是什么
-
其余代码中可能存在错误,我们在这里看不到。这意味着该列表将处于一种奇怪的状态,因此我们无法推断此
insertEnd会做什么。 -
您可能需要考虑如果列表为空会发生什么。您是否打算让一个空列表在
head中有NULL?如果是这样,那么这就是您必须解决的问题之一 -
另外,混淆
NULL和nullptr可能会在不知不觉中产生问题。在任何地方使用nullptr。
标签: c++ insert linked-list class-template