[英]Doubly linked list C++ Delete element
我在刪除鏈表的第一個和最后一個元素時遇到問題。 當我嘗試刪除第一個元素時,我的代碼不執行任何操作(當我打印列表時,刪除的元素仍然存在)。 當我嘗試刪除最后一個時,控制台顯示核心轉儲。
這是我的代碼:
void Delete_element(point del, node *elem) {
struct node *temp = elem;
if(elem->p.x==del.x && elem->p.y == del.y) {
elem=elem->next;
return;
} else {
while(elem->next->next!=NULL) {
if(elem->next->p.x==del.x && elem->next->p.y==del.y) {
temp=elem->next;
elem->next=elem->next->next;
elem->prev=temp->prev;
return;
}
temp=temp->next;
}
}
if(elem->next->p.x==del.x && elem->next->p.y==del.y) {
elem->next=NULL;
}
}
編輯:修復后
void Delete_element(point del, node *& elem){
struct node *temp = elem;
if(elem->p.x==del.x && elem->p.y == del.y){
temp = elem->next;
free(elem);
elem=temp;
return;
}else{
while(elem->next->next!=NULL)
{
if(elem->next->p.x==del.x && elem->next->p.y==del.y)
{
temp=elem->next;
elem->next=elem->next->next;
elem->next->prev=elem;
return;
}
elem=elem->next;
}}
if(elem->next->p.x==del.x && elem->next->p.y==del.y){
elem->next=NULL;
return;
}
}
現在,刪除中間元素已損壞。
請幫忙
首先,您實際上並沒有刪除任何內容。 但是,您留下了懸空的指針,這會導致內存泄漏。 在每種情況下,您都應該刪除一些內容。 這就是為什么您仍然看到數據而不是垃圾或某種崩潰的原因。
其次,您希望有一個無限循環。 當您打入while循環時,您永遠不會更改elem,因此elem-> next-> next永遠不會更改。
第三,為什么要在while循環中刪除elem-> next? 刪除elem以避免混淆。
編輯:
你不能那樣改變元素。 可以將elem像整數或float那樣傳入。如果要讓elem保持頭部變化,您將必須傳入一個指向elem的指針,該指針最終成為指向該指針的指針。
我相信您至少有兩個錯誤:
為了修改第一個元素,在您打算修改該指針時,必須將引用傳遞給第一個指針。 采用:
void Delete_element(point del, node *& elem)
從中間刪除元素似乎已損壞。 代替:
elem->prev=temp->prev
你應該有:
elem->next->prev=element
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.