C++ C++;链表-插入节点函数不';t更新超出功能范围的值
我正在编写一个程序,该程序在包含以下结构节点的单链表上执行函数:C++ C++;链表-插入节点函数不';t更新超出功能范围的值,c++,pointers,reference,linked-list,singly-linked-list,C++,Pointers,Reference,Linked List,Singly Linked List,我正在编写一个程序,该程序在包含以下结构节点的单链表上执行函数: typedef int ITEM; typedef struct NODE* NODEptr; struct NODE { ITEM data; NODEptr next; }; 这是我调用的将节点添加到列表头的函数(hdList指向列表头): 但是,在使用调试器时,我发现当程序离开函数时,hdList的值不会更新,即使它是通过引用传递的,我不知道为什么 非常感谢你的帮助和建议 编辑:根据要求,完整代码如下:
typedef int ITEM;
typedef struct NODE* NODEptr;
struct NODE
{
ITEM data;
NODEptr next;
};
这是我调用的将节点添加到列表头的函数(hdList指向列表头):
但是,在使用调试器时,我发现当程序离开函数时,hdList的值不会更新,即使它是通过引用传递的,我不知道为什么
非常感谢你的帮助和建议
编辑:根据要求,完整代码如下:
另外,我正在使用Visual Studio 2013编译,正确的函数如下所示
void addToHead(NODEptr &hdList, ITEM input)
{
NODEptr newNode = new NODE;
newNode->data = input;
newNode->next = hdList;
hdList = newNode;
}
或者如果编译器支持C++ 2011,则
void addToHead(NODEptr &hdList, ITEM input)
{
NODEptr newNode = new NODE { input, hdList };
hdList = newNode;
}
最初,必须通过nullptr
或NULL
初始化hdList
。比如说
NODEptr hdList = nullptr;
看起来您应该将
newNode->next
设置为hdList
只要确保hdList
已初始化为nullptr
@ooga就可以了!为宏保留所有大写字母有助于避免名称冲突和无意中的文本替换,而且对眼睛和耳朵来说也更容易。为了与代码的维护人员进行良好的沟通,说T*比说typedef T*T_ptr
和T_ptr
.Re“hdList未更新”,更简短、更清晰,如果这是正确的,那么需要一个完整的代码示例来诊断它。请不要张贴这样的例子。但是无论如何,请注意,如果函数是用一个公共开始指针作为实际参数调用的,那么函数保证一个只有一个节点的列表——这就是目的吗?好的,谢谢,我不知道caps的事情,而且我实际上被教过做typedefs以使它更可读,但我知道你是从哪里来的,也许我会根据函数的调用方式将其更改为“正确”:这个答案中给出的代码对于OP的调用模式可能是错误的。这就是为什么我要求OP提供完整的代码示例。例如,可以使用hdlist
引用列表最后一个节点中的next
指针调用该函数,并且使用OP的实现调用该函数是有意义和正确的。还要注意OP的声明“hdlist未更新”不会因更改/修复列表的链接而受到任何影响。因此,OP在问题描述或选择此答案作为解决方案方面肯定是错误的。因此,它将有助于回答中明确说明的假设,即关于函数调用的假设(以及OP的声明是不正确的)。@Cheers和hth.-Alf“correct”取决于函数的调用方式:此答案中给出的代码对于OP的调用模式可能是错误的。“无论OP如何调用函数,函数都是正确的。”。只能使用无效的函数,仅此而已。
NODEptr hdList = nullptr;