鍊錶課後複習題 王道

2021-10-03 08:40:11 字數 1329 閱讀 2553

目錄

1.設計乙個遞迴演算法,刪除不帶頭結點的單鏈表l中所有值為x的結點。

2.刪除帶頭結點的單鏈表l中所有值為x的結點。

3.在帶頭結點的單鏈表l中從尾到頭反向輸出每個結點的值

4.帶頭結點單鏈表l中刪除乙個最小值結點的比較高效的演算法,假設最小值結點唯一

5.將帶頭結點的鍊錶就地逆置

明日繼續更~

以下是幾道涉及到鍊錶的**題。

注意涉及到鍊錶的操作,一定要在紙上把過程先畫出來,再寫程式!

**

//刪除不帶頭結點的單鏈表l中所有值為x的結點

void del_x_3(linklist &l, elemtype x)else

}

這道題返回值為空,不是因為返回值位址相互連線在一起的,而是因為在本來的鍊錶中逐個刪除才得到的新鍊錶。原理就是逐個刪除等於x的結點。

這個不是遞迴演算法,而是正常解法

//刪除帶頭結點的單鏈表l中所有值為x的結點。

void del_x_2(linklist &l, elemtype x)else

}}

這道題返回值為空,也是通過遍歷逐個刪除值為x的結點實現的,操作之後直接就得出了現在的鍊錶

**

//在帶頭結點的單鏈表l中從尾到頭反向輸出每個結點的值

void r_print(linklist l)

printf(l->data);

}

有頭結點比較方便,不必特殊考慮第乙個結點

從頭到尾遍歷單鏈表,用minp作為指向最小值的指標,遍歷過程如果遇到更小值的就替換minp

乙個乙個遍歷就很高效了,因為沒有重複遍歷,遍歷一次就夠了

//帶頭結點單鏈表l中刪除乙個最小值結點的比較高效的演算法,假設最小值結點唯一

linklist deletemin(linklist &l)

pre = p;

p = p->next;

}minpre->next = minp->next;

free(minp);

return l;

}

minpre->next = minp->next; 和 free(minp); 這兩句就是刪除minp結點。

把頭結點摘下,然後從第乙個結點開始,依次插入到頭結點後面直到最後乙個結點

除了自帶的l指標外,還需要 p 和 r 指標,r 是 p 的後繼

//將帶頭結點的鍊錶就地逆置

linklist reverse_l(linklist l)

}

鍊錶複習題

c或者c 實現下面的題目並測試 1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?2.從尾到頭列印單鏈表 3.刪除乙個無頭單鏈表的非尾節點 4.在無頭單鏈表的乙個節點前插入乙個節點 5.單鏈表實現約瑟夫環 6.逆置 反轉單鏈表 7.單鏈表排序 氣泡排序 快速排序 8.合併兩個有序鍊錶,合併...

SAM複習題表

今天重新學了一下sam 那麼一些題目肯定是少不了的 在這裡記錄一下吧,可能沒什麼啟發的題就不寫了 題意 多個串的最長公共子串 題解 對於乙個建立sam,然後對於剩下的所有點在上面跑,對於每乙個點的狀態取最小值。但是這樣是不夠的,你還要跳一次fail來進行更新,這個的話拓撲更新就可以了 題意 求第k大...

王道課後習題2 3 22 兩個鍊錶的共同字尾

題目描述 帶頭結點的單鏈表,尋找兩個鍊錶的共同字尾的起始位置。演算法思想 雙指標法 核心 雙指標法 int length lnode l 注意 這裡之前寫成了int length lnode l 用的引用。這樣的話,head1和head2最後都會變成null。難怪執行不對。return k lnod...