0

我在从链接列表返回 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);
4

2 回答 2

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 循环中的下一次调用对列表中的下一个元素进行操作。注意**函数参数中的 。

于 2013-02-18T23:13:35.980 回答
0

您正在循环中间返回,因此您没有机会处理其他节点。

你需要改变一些东西来处理多个字符。您可以将它们收集到一个数组中,但这引入了需要提前知道列表中有多少项的问题。正如 ThePosey 建议的那样,您可以内联处理这些项目。

但是,如果您希望函数list_next每次都返回一项,那么您需要“返回”两件事:列表值和列表指针。一种方法是修改函数签名: char * list_next(list **l). 如果传入一个指向指针的指针,该函数可以将其用作 out 参数并将其设置为下一个节点。

于 2013-02-18T23:09:43.200 回答