我正在创建链表程序,我创建的函数允许用户在列表中的任何索引处插入新节点。
该函数有两种情况,一种是将节点插入列表中的第一个索引( 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;
}
}
答案 0 :(得分:0)
用
insertAt(list, createNode(value), index);
list
按值传递到
NODE * insertAt(NODE * pList, NODE * pNode, int index)
pList
是list
的副本,因此在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
为空,则退出该函数并打印错误消息。继续使用不存在的列表是没有意义的。