2014-03-28 46 views
0

我正在嘗試做一個函數,它需要一個指向我的鏈表頭部的指針,然後返回一個指向列表結尾處的項目的指針,或者如果它爲空,將返回NULL從鏈表中獲取最後一個元素C

這裏是我到目前爲止寫的:

MusicRec * getLastItem(MusicRec * theList) 
{ 
MursicRec * currentElement; 
currentElement = theList->next; 
while(currentElement != NULL) 
{ 
    theList = currentElement; 
    currentElement = currentElement->next; 
} 

return(0); 
} 

,我感到困惑的是什麼,我需要返回theListcurrentElement的事情嗎?

+0

'theList',因爲'currentElement'是NULL循環 –

+0

後的最後一個元素將被存儲在的thelist。 currentElement將始終爲NULL。 – marosoaie

回答

5

試試這個:)

MusicRec *getLastItem(MusicRec *theList) 
{ 
    MursicRec *currentElement; 

    currentElement = theList; 
    if (currentElement == NULL) // return NULL is list is empty cf (Captain girafe && learningC) 
     return (NULL); 
    while(currentElement->next != NULL) // check if next element is null then currentElement = next else return currentElement 
     currentElement = currentElement->next; 
    return (currentElement); 
} 
+0

如果列表爲空,我將如何返回NULL? – destroted

+0

如果'theList'作爲NULL傳遞給函數 –

+0

將會失敗如果你傳遞了一個NULL列表,它將返回NULL,這對我來說非常合理。 –

2

你應該返回theList
當循環結束時currentElement爲NULL。所以theList將指向最後一個節點。
並確保函數收到的theList不爲NULL。

0

遞歸執行相同的:

MusicRec *getLastItem(MusicRec *theList) 
{ 
    if (theList == NULL) // return NULL if list is empty 
     return NULL; 
    if (theList -> next == NULL) // return 1st element if it's a single element list 
     return theList; 
    return getLastItem(theList->next); // recurse 
} 
相關問題