【发布时间】:2015-11-29 20:28:22
【问题描述】:
我目前正在研究列表(试图重新创建它们)并且遇到了一个奇怪的问题。这是我的结构:
struct listNode{
listNode(int n, listNode* ne = NULL){
value = n;
next = ne;
}
int value;
listNode* next;
};
listNode* head = NULL;
现在我做了一个函数来在底部添加一个元素:
void add(int n){
if(head == NULL){
head = new listNode(n);
return;
}
listNode* n1 = head;
while(n1 != NULL){ //Should be: while(n1->next != NULL){
n1 = n1->next;
}
n1 = new listNode(n); //Should be: n1->next = new listNode(n);
}
但这并没有在头部添加任何元素。现在,我已经找到了解决方案(参见上面的 cmets)我的问题是我不明白为什么我的第一个函数不起作用。
我会用一个方案来解释我所理解的:
开始
头=空;
我加 1
HEAD = [1, NULL];
我添加 2
while 循环到达最后一个元素(其中“next”为 NULL)并在其中创建新元素
HEAD = [1, new listNode(2)];
结果
HEAD = [1, 指针] [2, NULL];
现在,为什么在 while 循环之后的 n1 不是我想要的?
【问题讨论】:
-
永远不要将问题命名为“指针如何工作?”。标题应该与 LinkedLists 相关
-
@asimes 真的不知道该写什么,抱歉。无论如何,沉默的投票者,愿意解释吗?
-
假设你有
int n = 5; int m = n; m = 7。你认为n应该变成 7 吗?不要这么想。但尽管如此,您说n1 = n1->next; n1 = new listNode(n);并期望先前n1的next成员发生变化。很奇怪吧? -
@n.m.如果
n1 = n1->next;n1之后为空,我希望它指向新元素 -
那么你应该将新元素分配给最后一个元素的属性
next。在说“但是 n1 是 最后一个元素的属性next”之前,再看一下m = n; m = 7。您是否将 7 分配给n?
标签: c++ pointers linked-list singly-linked-list