C雙向鍊錶刪除操作,C語言編寫雙向鍊錶刪除

2022-03-07 10:48:48 字數 1140 閱讀 1761

1樓:匿名使用者

node* tmpnode = node->next->next;

free(node->next);//free了已經node->next = tmpnode;//在這你又繼續使用了node->next->pre = node;//在這 你也使用了 所以 會出錯

在使用鍊錶的時候 要判斷他是否存在 不為空 再用 也就是進行安全性檢測

2樓:做挨踢的

首先,你的malloc用錯了,malloc(sizeof(node*))表示申請乙個大小為4位元組的區域,應該用malloc(sizeof(node)),這樣才能正確申請一塊剛好用於儲存乙個node的記憶體區域。因為sizeof(node*)得出的是node*這種指標所占用的記憶體大小,32位系統裡是4位元組。sizeof(node)則返回node結構體占用的記憶體大小。

所以需要把malloc(sizeof(node*))都改為malloc(sizeof(node))

其次,node* node = (node*)malloc(sizeof(node*));

if (null == node)

node = creatnode();

這樣寫沒有必要,浪費了記憶體空間

應改為:

node* node = creatnode();

if (null == node)

c語言編寫雙向鍊錶刪除

3樓:_葉子妞妞

原始核心**是有一些問題的。

修改如下:

#include

#include

typedef struct dubnodenode,*dublink;

void creat(dublink *l,int n)}void print(dublink l)printf("\n");

}void insert(dublink *l,int i,int e)

if(!p||j>i)

printf("error");

else

}void de(dublink *l,int i)if(!p||j>i)

printf("error");

else

}int main()

關於c語言鍊錶的問題,關於C語言鍊錶的問題

slist是你定義的結構體的名稱,你寫的動態記憶體分配,意思是申請乙個指向slist的slist記憶體空間的指標,沒有這個名稱,就相當於乙個人沒了名字,幹什麼都不方便 slist就是nde的別名 因為你用到關鍵字typedef typedef是給型別取別名之意 如 typedef unsigned ...

c語言問題,急急急!關於鍊錶的,c語言問題,急急急!關於鍊錶的!

include include typedef struct listlist list createlist int n return head list a b list a,list b 計算a b,計算結果儲存在a中 else if pa next null pa是表尾else 非表頭元素和...

在C語言鍊錶中,p q next和p next q next有什麼區別

給你普及下指標的真諦 假設兩個鍊錶節點的記憶體位址分別為aaaa和bbbb,節點內偏移4位元組處儲存名為next的指標,p 0xaaaa,q 0xbbbb,這說明p和q分別指向這兩個節點。p next是記憶體aaae處的內容,q next是記憶體bbbf處的內容 假設為cccc 那麼,p q nex...