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 子句。

或者您可以执行以下操作:

  1. 在每个 if 子句的末尾添加一个 break
  2. 将要打印的内容保存到局部变量,然后在一个地方打印(DRY principle),恕我直言,最适合这种情况