【问题标题】:Linked List Function Implementation Help: insertEnd C++链表函数实现帮助:insertEnd C++
【发布时间】: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 与(连接的函数)

我最初所做的是使用插入到链表开头的不同插入,它有效,但这不是这个新的重载函数应该做的(假设将一个列表附加到另一个),所以我创建了 insertEnd 来尝试使用它。

【问题讨论】:

  • 只要head 永远不能是nullptr,就没有什么特别错误的了。也许您使用它有问题? (调用时控制台中不应该显示任何内容,这与断点完全无关。)
  • 你能详细说明一下ListNode的构造函数中作为NULL传递的第二个参数是什么
  • 其余代码中可能存在错误,我们在这里看不到。这意味着该列表将处于一种奇怪的状态,因此我们无法推断此 insertEnd 会做什么。
  • 您可能需要考虑如果列表为空会发生什么。您是否打算让一个空列表在head 中有NULL?如果是这样,那么这就是您必须解决的问题之一
  • 另外,混淆NULLnullptr 可能会在不知不觉中产生问题。在任何地方使用nullptr

标签: c++ insert linked-list class-template


【解决方案1】:

不知道列表是如何定义和初始化的。不过,您似乎应该检查 head 是否等于 NULL。

例如

template <class Object>
void List<Object>::insertEnd(const Object& data) // INSERT: At the end!
{
    ListNode<Object>* newnode = new ListNode<Object>( data, nullptr );

    if ( head == nullptr )
    {
        head = newnode;
    }
    else
    {
        ListNode<Object> *getToEnd = head;
        while ( getToEnd->getNext() != nullptr ) getToEnd = getToEnd->getNext();

        getToEnd->setNext(newnode);
    }
}

并且 head 应该被初始化为 nullptr 然后创建列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2015-08-03
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多