今天歸納鏈表的時候,寫了一個刪除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 回答
- 0 關注
- 1823 瀏覽
添加回答
舉報
0/150
提交
取消