将新节点链接到c中的链接列表的问题

时间:2014-01-25 09:30:48

标签: c linked-list

我是C的新手,也是编程的新手,我刚刚开始查看链接列表。

static struct post {
    char * str;
    struct post * next;
}
head = {0, NULL};


int stringdb_add(const char * str) {
    int pos = 0;
    struct post * new_input = (struct post * ) malloc(sizeof(struct post));
    new_input - > str = (char * ) malloc(strlen(str) + 1);

    if (head.next == NULL) {
        strcpy(new_input - > str, str);
        new_input - > next = NULL;
        head.next = new_input;
    } else {
        while (head.next - > next) {
            ++pos;
            head.next = head.next - > next;
        }
        strcpy(new_input - > str, str);
        new_input - > next = NULL;
        head.next - > next = new_input;
    }

    return pos;
}

函数“stringdb_add”应该返回新节点所在的位置,但是当我测试函数时我只得到(00111111 ....)。

这可能是因为列表从未正确链接。

1 个答案:

答案 0 :(得分:3)

while (head.next->next) {
   ++pos;
   head.next = head.next->next;        
}

你永远在改变head.next,这肯定不是你想要的。你可能想要这样的东西:

struct post *p = &head;
while (p->next->next)
/* ... */

Nitpick:strcpy(new_input->str, str)可以在if之前的一个地方。