亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于雙鏈表刪除任意數據!

關于雙鏈表刪除任意數據!

asdhjhg 2017-05-29 16:40:39
今天歸納鏈表的時候,寫了一個刪除double linklist的任意數據,我覺得自己寫的好臃腫,雖然g++過了,但是總覺得是不是哪里欠妥當。。。。。強迫癥,總是感覺代碼是不是不夠精煉。。。。請大神給我提意見。。。自己有python和linux的一點點基礎。。。C才學一個月,輕噴。。。一下是delete部分的代碼!struct?Node?*delete_givendata(int?data) { ????struct?Node?*current?=?head; ????struct?Node?*temp?=?NULL; ????struct?Node?*temp1?=?NULL; ????if?(head?==?NULL)?return?NULL;//empty! ????while?(current?->?data?!=?data)//find?the?data?we?want?to?delete. ????{ ????????current?=?current?->?next; ????} ????if?(current?==?head?&&?current?->?next?!=?NULL)//the?first?data?is?that?data?we?want?to?delete ????{ ????????head?=?current?->?next; ????????current?->?next?->?prev?=?NULL; ????????free(current); ????????return?head; ????} ????else?if?(current?->?prev?!=?NULL?&&?current?->?next?==?NULL)//the?last?data?is?that?data?we?want?to?delete ????{ ????????current?->?prev?->?next?=?NULL; ????????free(current); ????????return?head; ????} ????else?if?(head?->?next?==?NULL)//just?one?data?in?list ????{ ????????head?=?NULL; ????????free(current); ????????return?head; ????} ????//the?data?in?(first+1,last-1) ????temp?=?current?->?prev; ????temp1?=?current?->?next; ????temp?->?next?=?temp1; ????temp1?->?prev?=??temp; ????free(current); ????return?head; }
查看完整描述

2 回答

?
onemoo

TA貢獻883條經驗 獲得超454個贊

你這個代碼第 7 行 while 語句處好像有邏輯問題吧? ?你說代碼通過了,我不知道你有沒有進行充分地測試。

這個 while 是為了找到等于 data 值的 node,可你沒考慮找不到的情形。

假設這個鏈表中只有一個首 node,而且它的值還不是 data。那么 while 第一次循環后 current 就已經是 NULL 了,第二次進入 while 循環時就會因為訪問 NULL 指針而出錯退出。

查看完整回答
反對 回復 2017-06-09
?
為夢想努力_冬

TA貢獻56條經驗 獲得超14個贊

666,厲害了

查看完整回答
反對 回復 2017-05-30
  • asdhjhg
    asdhjhg
    就這還666,其實我覺得真的寫的挺臃腫的,給點意見啊
  • 2 回答
  • 0 關注
  • 1823 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號