LinkedList 两次读取根的值
LinkedList reads root's value twice
当我键入链表的第一个值时,控制台将相同的值写入两次。比如我输入a,它就写aa,然后就正常了。
if (r == NULL) { // If our list is empty...
r = (node *) malloc(sizeof(node));
r->x = i;
r->next = NULL;
r->prev = NULL;
iter = r;
last = r;
printf("%c", i);
}
if (iter == last) {
node* temp = (node *) malloc(sizeof(node));
temp-> x = i;
temp->prev = last;
last->next = temp;
temp->next = NULL;
last = temp;
iter = last;
printf("%c", i);
}
我该如何解决?我用 getch()
来获取字符。
您的列表中遗漏了一堆有用的代码,但基本上在创建根节点时它总是会打印两次,因为两个 if
块都将被执行。如果您不想同时执行它们,请尝试对第二个块使用 else if
。
在第二个 if 子句之前添加一个 else。
r 完全有可能为 null,紧接着,你的第二个 if 子句的条件规定
if(iter==last)
在前面的 if 子句中,您执行以下操作
iter = r;
last = r;
因此 iter 等于 last 并且执行第二个 if 子句。
或者您可以执行以下操作:
- 在每个
if
子句的末尾添加一个 break
- 将要打印的内容保存到局部变量,然后在一个地方打印(DRY principle),恕我直言,最适合这种情况
当我键入链表的第一个值时,控制台将相同的值写入两次。比如我输入a,它就写aa,然后就正常了。
if (r == NULL) { // If our list is empty...
r = (node *) malloc(sizeof(node));
r->x = i;
r->next = NULL;
r->prev = NULL;
iter = r;
last = r;
printf("%c", i);
}
if (iter == last) {
node* temp = (node *) malloc(sizeof(node));
temp-> x = i;
temp->prev = last;
last->next = temp;
temp->next = NULL;
last = temp;
iter = last;
printf("%c", i);
}
我该如何解决?我用 getch()
来获取字符。
您的列表中遗漏了一堆有用的代码,但基本上在创建根节点时它总是会打印两次,因为两个 if
块都将被执行。如果您不想同时执行它们,请尝试对第二个块使用 else if
。
在第二个 if 子句之前添加一个 else。 r 完全有可能为 null,紧接着,你的第二个 if 子句的条件规定
if(iter==last)
在前面的 if 子句中,您执行以下操作
iter = r;
last = r;
因此 iter 等于 last 并且执行第二个 if 子句。
或者您可以执行以下操作:
- 在每个
if
子句的末尾添加一个break
- 将要打印的内容保存到局部变量,然后在一个地方打印(DRY principle),恕我直言,最适合这种情况