簡體   English   中英

雙鏈表C ++ Delete元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM