在索引处插入节点:链接列表未正确返回列表

时间:2018-04-04 17:27:30

标签: c++ linked-list

我正在创建链表程序,我创建的函数允许用户在列表中的任何索引处插入新节点。

该函数有两种情况,一种是将节点插入列表中的第一个索引( index == 0),另一种是如果索引不是第一个索引。

代码只能在其中一种情况下正确运行,具体取决于我在main中调用函数的方式。

在main中,我试图以两种方式调用函数,(value是节点值,createNode创建节点。)

第一个是:

insertAt(list, createNode(value), index);

当我以这种方式调用函数时,函数运行正常,但 index == 0 的异常情况根本不会插入节点

第二个是:

list = insertAt(list, createNode(value), index);

以这种方式实现时,( index == 0 )的情况正确运行,但另一种情况则没有。

在这种情况下,该函数返回一个修改后的列表,其中没有 index 之前的所有节点。

这是功能代码:

NODE * insertAt(NODE * pList, NODE * pNode, int index)
{
    if (!pList) {
        cout << "error";
    }

    NODE * temp = pList;

    if (index == 0)
    {
        pNode->next = temp;
        temp = pNode;
        return temp;
    }
    else
    {
        for (int i = 0; i < index - 1; i++)
        {
        temp = temp->next;
        }

        pNode->next = temp->next;
        temp->next = pNode;

        return temp;
    }

}

1 个答案:

答案 0 :(得分:0)

insertAt(list, createNode(value), index);

list按值传递到

NODE * insertAt(NODE * pList, NODE * pNode, int index)

pListlist的副本,因此在pList内未对list内的list进行更新。

接受list = insertAt(list, createNode(value), index);

中的返回值
list

根据更改更新list = insertAt(list, createNode(value), index);

不幸的是

for (int i = 0; i < index - 1; i++)
{
    temp = temp->next;
}

似乎会丢失列表的其余部分,因为

index

迭代找到return temp;

index

发送list以存储在std::list中,泄漏列表的开头。

这显然是出于教育目的(如果有可能不是,请使用NODE * insertAt(NODE *& pList, NODE * pNode, int index) ),因此我很难提供完整的解决方案。

index

应该让你开始走正确的道路。

其他说明:

在列表结束时测试列表的结尾,以便在列表提前结束的情况下查找pList

如果path/to/keep-user-active.php为空,则退出该函数并打印错误消息。继续使用不存在的列表是没有意义的。