題目:刪除帶頭結點的單鏈表l中的結點p,p不是最後乙個結點,要求時間複雜度為o(1)。
解題思路:
如果不要求時間複雜度為o(1),我們可以找出p的前驅結點,然後很容易就刪除p。
現在要求時間複雜度為o(1),因為p不是最後乙個結點,知道結點p我們可以刪除p的後繼結點,那麼我們可以把p的後繼結點元素的值賦給p結點元素的值。
adt定義如下
#define elemtype int
typedef struct lnodelnode,*linklist;
演算法實現:
void deletenode(lnode* &p)
拓展:如果刪除的結點p可能是最後乙個結點,怎麼辦。
解題思路:此時只能保證刪除結點的平均時間複雜度為o(1),當p不是最後乙個結點,時間複雜度為o(1),當p是最後乙個結點時,時間複雜度為o(n)。
演算法實現:
void deletenode(linklist &l,lnode* &p)
else //如果p是最後乙個結點
} }
}
單鏈表結點刪除
本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中所有儲存了某給定值的結點刪除。鍊錶結點定義如下 truct listnode struct listnode readlist struct listnode deletem struct listnode l,int m 函式readli...
習題11 8 單鏈表結點刪除
本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中所有儲存了某給定值的結點刪除。鍊錶結點定義如下 struct listnode struct listnode readlist struct listnode deletem struct listnode l,int m 函式readl...
實驗11 2 8 單鏈表結點刪除
本題要求實現兩個函式,分別將讀入的資料儲存為單鏈表 將鍊錶中所有儲存了某給定值的結點刪除。鍊錶結點定義如下 struct listnode 函式介面定義 struct listnode readlist struct listnode deletem struct listnode l,int m ...