LinkedList读取root的值两次

时间:2016-12-08 20:58:25

标签: c linked-list doubly-linked-list

当我键入链表的第一个值时,控制台会两次写入相同的值。例如,如果我输入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()来获取字符。

2 个答案:

答案 0 :(得分:3)

您在列表中缺少一堆有用的代码,但基本上它在创建根节点时总是会打印两次,因为两个if块都将被执行。如果您不希望它们都被执行,请尝试使用else if作为第二个块。

答案 1 :(得分:0)

在第二个if子句之前添加else。 完全有可能r为null,然后紧接着,第二个if子句的条件规定

if(iter==last)

在先前的if子句中,您执行以下操作

iter = r;
last = r;

因此iter等于last,第二个if子句被执行。

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

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