我編寫了代碼,根據用戶 的選擇從列表中刪除特定的節點,代碼對於特定的值完全正常工作,但如果我使用 幾次調用它意味着我把它叫做2次連續然後我 彼此功能pointer_to_node(index)
給出了一個出界錯誤, 也由我來實現記錄這樣的條件下,圓形單鏈表:從列表中刪除一個特定的節點
其實,爲什麼我需要幾個電話,是我必須寫單獨功能 刪除所有節點。我正在嘗試使用此 函數完成該任務,方法是使用一個for
循環,直至達到我的Circular Singly Linked列表的大小。 但在這種情況下,它也返回給我一個NULL
指針,並給了我超出範圍的 消息(由我在代碼中實現)。我已經包括了我的兩個功能下降 這裏
void remove_from_index(int index){
Node*temptr;
temptr = new Node;
int tempdata;
if (index==1)//means remove from first
{
temptr = firstptr;
tempdata= temptr->data;
firstptr = firstptr->nextptr;
lastptr->nextptr=firstptr;
delete(temptr);
} else if(index==size_of_list()) //means last node
{
temptr = pointer_to_node(index);
index--; //get pointer of 2nd last position
lastptr = pointer_to_node(index);//setting 2nd last as last postion
temptr->nextptr=NULL;
temptr=NULL;
lastptr->nextptr=firstptr;
delete (temptr);
} else // any position of node
{
temptr = pointer_to_node(index);
tempdata = temptr->data;
index--; // to get address of back
Node* temp2ptr;
temp2ptr = new Node;
temp2ptr = pointer_to_node(index);
index = index+2;
Node* temp3ptr;
temp3ptr = new Node;
temp3ptr = pointer_to_node(index);
temp2ptr->nextptr = temp3ptr;
temptr->nextptr=NULL;
delete (temptr);
}
}
Node* pointer_to_node(int index){
Node*temptr;
temptr = new Node;
temptr = firstptr;
Node*temptr2;
temptr2 = new Node;
temptr2 = NULL;
int count = 1;
while (temptr!=temptr2){
if (count==index)
{
return temptr;
}
count++;
temptr2=firstptr;
temptr=temptr->nextptr;
}
if (index>size_of_list())
{
temptr=NULL;
cout<< "Can't You think in bounds. Take your NULL Pointer ";
return temptr;
delete temptr;
delete temptr2;
}
}
你有很多內存泄漏,但總的來說聯動必須工作。如果你已經聲明瞭這個,你可以分享'Node'的內部函數嗎? –
@BorisStrandjev不,我沒有包括析構,,, ....我怎樣才能避免內存泄漏... 實際上,如果我不使用新的應該如何刪除節點呢? –
我會添加一個部分答案指出你有內存泄漏的地方,以及如何解決這個問題。 –