2012-12-07 77 views
2
CAR *removing(int *numberofstructures,CAR *first) 
{ 
    char categorytoerase[51]; 
    CAR *helpnode,*actual; 
    int i; 
    int number_1=0; 
    helpnode=(CAR*)malloc(sizeof(CAR)); 
    actual=(CAR*)malloc(sizeof(CAR)); 
    actual=first; 
    number_1=*numberofstructures; 
    helpnode=NULL; 
    scanf("%s",categorytoerase); 
    for(i=1;i<=number_1;i++) 
    { 
     if (actual->znacka==categorytoerase) 
     { 
      if (helpnode != NULL) { 
       helpnode->next=actual->next; 
       free((void *)actual); 
       actual=helpnode->next; 
      } 
      else 
      { 
       first = actual -> next; 
       free((void *)actual); 
       actual = first; 
      } 
     } 
     else{ 
      helpnode=actual; 
      actual=actual->next; 
     } 
    } 
    return first; 
} 

我想創建一個從鏈表中刪除節點的函數,首先你必須輸入字符串。它應該刪除那些有汽車類別名稱的節點,如輸入的字符串。鏈接列表清除節點

+1

http://stackoverflow.com/questions/69209/deleting-a-middle-node-from-a-single-linked-list-when-pointer-to-the-previous-no,http:// stackoverflow .com/questions/13744946/delete-node-from-linked-list-recursively,http://stackoverflow.com/questions/13656061/delete-node-from-linked-list-with-specific-value –

回答

1

這看起來很像家庭作業....所以本着那種不爲你寫答案的雞巴,我會告訴你刪除一個節點的想法。

節點包含其數據和指向下一個節點的地址。

所以,既然你知道,你可以創建一個方法......在頭

開頭且當前節點與前一個節點的引用

爲您搜索的列表中需要刪除的節點不斷循環當前節點變量和先前節點變量 。

當您找到正在查找的節點時,將前一個節點的下一個地址指針 設置爲您要刪除的節點的下一個地址指針。

祝你好運首席!

0

AMR是對的。如果您有雙向鏈接列表,則刪除節點會更容易,因此在結構中爲節點包含前一個和下一個指針。基本上,這裏的如何刪除將在僞發生(你找到後有一個指針到要刪除的節點):

IF todelete.prev != NULL THEN 
    todelete.prev.next = todelete.next 
ELSE 
    list.head = todelete.next 
END IF 
IF todelete.next != NULL THEN 
    todelete.next.prev = todelete.prev 
ELSE 
    list.tail = todelete.prev 
END IF 

FREE todelete 

的條件,如果是重要的;否則程序會崩潰,邏輯實際上不起作用 - 你不能很好地替換不存在的東西。