遍历链表并返回char *值

时间:2013-02-18 23:06:44

标签: c

我有问题从链表返回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);

2 个答案:

答案 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参数并将其设置为下一个节点。