我有问题从链表返回char *值有人可以请帮忙 如何在while循环中返回char *值?当我尝试运行我的程序时,我从链接列表中获得一个值,永远循环使用以下代码:
char * list_next(list *l)
{
list *currentPosition = NULL;
currentPosition = l->next; //skipping dummy value in the singly linked list
while (currentPosition != NULL)
{
currentPosition = currentPosition->next;
return currentPosition->charValue;
}
return NULL;
}
这就是我调用函数的方式:
char * item;
while(item = list_next(list))
printf("%s ",item);
答案 0 :(得分:1)
像
这样的事情会更容易list* current = list->next; //skip the dummy
while(current)
{
printf("%s ", current->charValue);
current = current->next;
}
但是既然你必须使用一个函数来完成它并以你所拥有的格式执行它,你会做类似以下的事情:
char* list_next(list **l)
{
if (*l != NULL)
{
char* value = (*l)->charValue;
*l = (*l)->next;
return value;
}
return NULL;
}
并称之为
list* temp_list = my_list->next; //skip the dummy
char * item;
while(item = list_next(&temp_list))
printf("%s ",item);
您只能从函数返回1个值。要像你最初在while循环中那样重复调用函数来遍历整个列表,你必须修改输入参数,以便while循环中的下一个调用对列表中的下一个元素进行操作。注意函数参数中的**
。
答案 1 :(得分:0)
您正在循环中间返回,因此您没有机会处理其他节点。
您需要更改某些内容以处理多个字符。您可以将它们收集到一个数组中,但这会引入需要事先知道列表中有多少项的问题。正如ThePosey建议的那样,你可以内联处理这些项目。
但是如果你希望函数是list_next
并且每次返回一个项目,那么你需要'返回'两件事:列表值和列表指针。一种方法是修改函数签名:char * list_next(list **l)
。如果传入指向指针的指针,该函数可以将其用作out参数并将其设置为下一个节点。