2017-05-30 285 views
0

我從給定鏈接列表中刪除元素有一些問題。這是我得到的:從鏈接列表中刪除元素

void deleteElement(node *list) 
{ 
    node *currP, *prevP = NULL; 

    for (currP = list; currP != NULL; prevP = currP, currP = currP->next) { 

     if(currP->info.name[0] == 'A') { /* Found it. */ 
      if (prevP == NULL) { 
       list = currP->next; 
      } else { 
       prevP->next = currP->next; 
      } 

      free(currP); 
      return; 
     } 
    } 
    printList(list); 
} 

用這種方式寫的printList函數打印我的整個列表,它就像沒有被刪除。有什麼錯誤的想法?

+3

'list = currP-> next;'很重要,因爲它對*調用者*沒有意義。 list,指針的值就是這樣;一個值*。您需要通過地址(指向指針的指針)傳遞指針,或者使用未使用的返回結果始終返回列表頭並相應地使用它。 – WhozCraig

+0

在理解C basic之前,您不應該嘗試在C中執行鏈表。 – Stargateur

回答

0

第一:似乎沒有找到刪除元素。如果發現return語句會結束該函數,並且printList(list)函數將不會被調用。

第二:使用break跳出for循環而不是return

第三:您的deleteElement()應該返回指向list的指針,表示free的第一個元素。然後,在函數內部列表被設置爲新的第一個元素,但是如果你沒有返回新的地址,那麼你的列表只是一個被釋放的元素,當你下次調用元素時可能會導致分段錯誤。