0

我正在尝试打印一个 char* 的链表的内容,但是 while 循环弄乱了代码:

获取链表中下一项的函数:

char * list_next(list *l)
{
    list *currentPosition = NULL;
    currentPosition = l->next; //since the first node is a dummy value in the singly linked list

    while (currentPosition != NULL)
    {
        return currentPosition->charValue;
        currentPosition = currentPosition->next;
    }

    return NULL;
}

在我的主要:

char * item;
while(item = list_next(list))
    printf("%s ",item);

有人可以帮我吗我很确定问题是while循环内的返回但我似乎无法修复它

4

4 回答 4

3

交换两条线。return立即退出函数。它应该读

currentPosition = currentPosition->next;
return currentPosition->charValue;

反而。

(更不用说其他人也指出的许多其他错误——next由于范围混淆、NULL取消引用之前缺少检查等而导致无法实际更新指针。)

于 2013-02-18T21:47:44.270 回答
2

您的程序,即使交换了返回位置,每次仍然只会打印列表中的“第二个”项目 - 如果它存在的话。您要么需要使用双指针来更新基值,要么想出一些更好的方法来迭代您的列表。

于 2013-02-18T21:52:15.043 回答
0

您在评论中提到您只需要返回链接列表中的所有值。

function iterate(someNode)
   if someNode ≠ null
     node := someNode
     do
       do something with node.value [1]
       node := node.next
     while node ≠ someNode

来自这篇维基百科文章CC BY-SA

现在您可以简单地printf()在代码中的位置 [1] 处。但是,您似乎必须返回所有值。因此,您必须创建一个(可能是动态的)数组。

于 2013-02-19T18:48:54.693 回答
0

您将原始列表传递给 list_next()。我相信您将始终在永远循环中打印第二项。

我建议您可以将其简化如下:

char *item;
for (item=list->next; // Skip the first item as you said the first node is dummy.
     item != NULL; item=item->next) {
    printf("%s ",item->charValue);
} 
于 2013-02-18T21:58:56.317 回答