当我键入链表的第一个值时,控制台会两次写入相同的值。例如,如果我输入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()
来获取字符。
答案 0 :(得分:3)
您在列表中缺少一堆有用的代码,但基本上它在创建根节点时总是会打印两次,因为两个if
块都将被执行。如果您不希望它们都被执行,请尝试使用else if
作为第二个块。
答案 1 :(得分:0)
在第二个if子句之前添加else。 完全有可能r为null,然后紧接着,第二个if子句的条件规定
if(iter==last)
在先前的if子句中,您执行以下操作
iter = r;
last = r;
因此iter等于last,第二个if子句被执行。
或者,您可以执行以下操作:
break
子句if