經典面試題 單鏈表之無頭刪除

2021-07-23 00:09:37 字數 837 閱讀 8376

在刪除乙個單鏈表的乙個資料成員時,大家都應該很清楚得有個頭,就說說簡單的尾刪吧,你的做法一定是這樣子:phead位置向後一直找到尾巴的前乙個位置,將他的next改為null,然後釋放掉尾巴就ok;看似簡單問題還是用到了phead,因為你至少得讓可動指標指向準備刪除這個成員的前乙個成員身上。

中間刪,就是從頭找到要刪的成員之前成員身上,問題還是在phead,也許你會這麼想,直接給定你位置,不久可以不用phead從頭開始再挨個挨個找那個位置了呀!但是敏感的人都知道,要是問題要刪除的是p後面那個元素,那麼問題就很簡單了吧!

(但是問題就讓你刪除p)如果你直接刪除p那麼這個單鏈表就斷了,你如果先不刪,準備把上乙個的next指過來,但是單鏈表沒有前驅,找不到上乙個成員。而且也沒有phead來尋找上乙個成員。那麼現在我來教你一種很經典的辦法!

辦法:你將p->data的值用p->next->data覆蓋ok;一次類推將後面的都要往前覆蓋,記得釋放掉最後乙個結構體,不然記憶體洩漏。

**:

bool destory_link_list_ex(node *phead)

for(int i = 0;i < m ;i ++)

free(phead);

return true;

}

bool del_no_head(node  *p)

while(s->next != null)

p->data = s->data;

p->next = null;

destory_link_list_ex(s);

return true;

}

**就是這樣子,是不是很經典。

無頭單鏈表面試題

linklist.h 逆序列印單項鍊表 void reverseprint plist plist 刪除無頭單鏈表的非尾結點 void erasenottail pnode pos 在無頭單鏈表的非頭結點前插入乙個元素 void insertfrontnode pnode pos,datatype ...

經典面試題陷阱之無限迴圈

在vs環境下,請看下面的 輸出的結果是什麼?includeint main for i 0 i 12 i return 0 大家一看到這道題肯定會以為越界訪問了,程式會掛掉。但是這道題裡確實是有一點陷阱的,我們執行起來,這個程式輸出的結果盡然是無限迴圈的hehe。下面讓我們一起來 一下 首先,我們來...

面試題 單鏈表反轉

問題 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。一 非遞迴演算法 假設有鍊錶a b c d e f g。在反轉鍊錶過程中的某一階段,其鍊錶指標指向為 a b c d e f g。也就是說在結點d之前的所有結點都已經反轉,而結點d後面的結點e開始的所有結點都沒有反轉。這樣...