2013-02-18 113 views
0

我有問題從鏈接列表返回char *值有人請請幫忙 如何在while循環內返回char *值?當我嘗試運行我的程序我從我的鏈表用下面的代碼永遠循環單個值:遍歷鏈表並返回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); 
+1

閱讀你的函數讓我覺得你可能會喜歡函數式編程(在這裏你可以說'取得這個列表中每個項目的charValue')。 – 2013-02-18 23:15:43

+0

每個列表項是否保存一個字符串? – AShelly 2013-02-18 23:21:16

+0

是每個節點都有char * charValue – Jim 2013-02-18 23:23:04

回答

0

您在正在迴歸循環的中間,所以你沒有機會處理其他節點。

您需要更改某些內容才能處理多個字符。您可以將它們收集到一個數組中,但是這會引發需要事先知道列表中有多少項的問題。正如ThePosey所建議的那樣,您可以直接處理這些物品。

但是,如果你想要的函數是list_next並且每次返回一個項目,那麼你需要'返回'兩件事情:列表值和列表指針。一種方法是修改函數簽名:char * list_next(list **l)。如果你傳遞一個指向指針的指針,函數可以將它用作out參數並將其設置爲下一個節點。

+0

如何在while循環中返回多於1個char *? – Jim 2013-02-18 23:11:08

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循環中的下一個調用操作列表中的下一個元素。請注意函數參數中的**

+0

這會更容易,但我需要返回一個char * – Jim 2013-02-18 23:16:15

+0

而不是'while(* l!= NULL)'你可以使用'if(* l!= NULL)';循環體中的return語句會導致循環永遠不會迭代多次。 – 2013-02-18 23:28:06

+0

@FrerichRaabe哎呀,這意味着這是一個如果。 – ThePosey 2013-02-18 23:30:17