2015-10-13 105 views
-2

我知道如何從單獨鏈接列表的前面刪除節點,但我不知道如何從任意位置刪除節點。刪除鏈接列表中任意位置的節點

在我的具體問題,我繼續傳遞一個整數值x到鏈接列表中的每個節點。我可以添加和刪除,但是我需要寫一個函數,如果我確定了兩個相同的x,我刪除另一個實例。

我可以給我的代碼的例子,如果任何人需要我迄今爲止做的例子。感謝您的任何和所有迴應

此外,我正在與一個單一的鏈接列表。

回答

1

這是單鏈表有缺點。它需要重複執行刪除操作,因爲您無法找到任意元素的前一個元素。你可以找到它的下一個元素。您必須從列表頭開始迭代以查找其以前的元素。

希望這會有所幫助。

1

我在做什麼,當我查看列表時,什麼不是:在遍歷列表時,我將指向前一個元素的指針保存在一個單獨的變量中,如果我決定刪除當前元素,我已經有了指向前一個元素的指針。

因此,僞代碼明智的(更好地說明它),這將是這樣的:

prevValue = NULL 
for curValue = root; curValue != NULL; curValue = curValue->Next 
LOOP 
IF *need to delete curValue* 
THEN 
    IF prevValue == NULL 
    THEN 
     root = curValue->Next 
     delete curValue 
     curValue = root 
    ELSE 
     prevValue->Next = curValue->Next 
     delete curValue 
     curValue = prevValue 
    END IF 
END IF 
prevValue = curValue 
END LOOP 
+0

我想你說的使用while循環是什麼。問題是,我不知道該怎麼做刪除我的節點。 – gonavy96

+0

Node * removeAge = head; \t \t而(removeAge!= NULL) \t \t { \t \t \t如果(test_age_contained_in_singly_linked_list(X)) \t \t \t { \t \t \t \t //這裏的任何想法? \t \t \t} \t \t \t removeAge = removeAge->下; \t \t} – gonavy96

+0

謝謝你的方式,你和大家在這裏做了非常清楚的事情在做什麼!我如何去刪除我的if語句中的節點? – gonavy96

1

由於每個節點只能有一個鏈接到後續節點,你將不得不遍歷整個列表以獲取前一個元素,然後將前一個節點與下一個節點鏈接起來。 (接下來,再下一個你想刪除)

0

節點刪除(節點頭,INT d){

if(head==NULL) 
    cout<<"empty linked list\n"; 
else { 
    node*curr=head,*pre=NULL; 
    while (curr!=NULL && curr->data !=d) 
    { 
     pre=curr; 
     curr=curr->next; 
    } 
    if(curr==NULL) 
     cout<<"Mahloch this number not found\n"; 
    else { 
     if(pre==NULL) 
      head=curr->next; 
     else 
      pre->next=curr->next; 
     curr->next=NULL; 
     delete(curr); } 

}return head; 

}

+0

提供你的答案描述,這將有助於他人理解你的方法。 – cosmoonot