java單向鏈表和雙向鏈表區(qū)別 循環(huán)鏈表和雙向鏈表的區(qū)別是是什么?
循環(huán)鏈表和雙向鏈表的區(qū)別是是什么?單向鏈表或單表單鏈表,它包含兩個(gè)字段,一個(gè)信息字段和一個(gè)指針字段。此鏈接指向表中的下一個(gè)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)指向空值。單向鏈表只能在一個(gè)方向上遍歷。搜索節(jié)點(diǎn)時(shí),需要從第
循環(huán)鏈表和雙向鏈表的區(qū)別是是什么?
單向鏈表或單表單鏈表,它包含兩個(gè)字段,一個(gè)信息字段和一個(gè)指針字段。此鏈接指向表中的下一個(gè)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)指向空值。單向鏈表只能在一個(gè)方向上遍歷。搜索節(jié)點(diǎn)時(shí),需要從第一個(gè)節(jié)點(diǎn)開始,每次都訪問下一個(gè)節(jié)點(diǎn),直到到達(dá)所需位置。您還可以預(yù)先保存節(jié)點(diǎn)的位置并直接訪問它。雙向鏈表又稱雙鏈表,它不僅有一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針,而且還有一個(gè)指向上一個(gè)節(jié)點(diǎn)的指針。第一個(gè)節(jié)點(diǎn)的“前連接”指向null,最后一個(gè)節(jié)點(diǎn)的“后連接”指向null。這樣,就可以從任何節(jié)點(diǎn)、下一個(gè)節(jié)點(diǎn)甚至整個(gè)鏈表訪問上一個(gè)節(jié)點(diǎn)。通常在需要大量數(shù)據(jù)來存儲(chǔ)數(shù)據(jù)在鏈表中的位置時(shí)使用。因?yàn)橹赶蜴湵韮?nèi)容的指針被存儲(chǔ),并且相鄰的節(jié)點(diǎn)可以被修改,所以有時(shí)第一個(gè)節(jié)點(diǎn)可以被刪除,或者在第一個(gè)節(jié)點(diǎn)之前添加一個(gè)新節(jié)點(diǎn)。此時(shí),需要修改指向第一個(gè)節(jié)點(diǎn)的指針。消除這種特殊情況的一種方便方法是存儲(chǔ)一個(gè)虛擬節(jié)點(diǎn),該節(jié)點(diǎn)永遠(yuǎn)不會(huì)在最后一個(gè)節(jié)點(diǎn)之后和第一個(gè)節(jié)點(diǎn)之前被刪除或移動(dòng),從而形成一個(gè)循環(huán)列表。虛擬節(jié)點(diǎn)之后的節(jié)點(diǎn)是真正的第一個(gè)節(jié)點(diǎn)。在這種情況下,可以使用虛擬節(jié)點(diǎn)直接表示鏈表。循環(huán)列表在循環(huán)列表中,第一個(gè)節(jié)點(diǎn)和最后一個(gè)節(jié)點(diǎn)連接在一起。這種方法可以在單向鏈表和雙向鏈表中實(shí)現(xiàn)。要轉(zhuǎn)換循環(huán)列表,可以從任何節(jié)點(diǎn)開始,然后沿著列表的任何方向進(jìn)行操作,直到返回到起始節(jié)點(diǎn)。循環(huán)鏈表可視為“無頭無尾”。循環(huán)列表中第一個(gè)節(jié)點(diǎn)之前是最后一個(gè)節(jié)點(diǎn),反之亦然。循環(huán)鏈表的無限性使得在這種鏈表上設(shè)計(jì)算法比普通鏈表更容易。對(duì)于新增加的節(jié)點(diǎn),無論是在第一個(gè)節(jié)點(diǎn)之前還是在最后一個(gè)節(jié)點(diǎn)之后,都可以根據(jù)實(shí)際需要靈活處理。此外,還有一個(gè)模擬的循環(huán)列表,即在訪問最后一個(gè)節(jié)點(diǎn)后,手動(dòng)跳轉(zhuǎn)到第一個(gè)節(jié)點(diǎn)。在訪問第一個(gè)節(jié)點(diǎn)之前也是如此。這還可以實(shí)現(xiàn)循環(huán)列表的功能,當(dāng)直接使用循環(huán)列表有困難或可能出現(xiàn)問題時(shí),可以使用循環(huán)列表。
單向鏈表和雙向鏈表的區(qū)別?
單向鏈表:?jiǎn)蜗蜴湵戆瑑蓚€(gè)字段,一個(gè)是信息字段,另一個(gè)是指針字段。也就是說,單向鏈表的節(jié)點(diǎn)分為兩部分,一部分是保存或顯示該節(jié)點(diǎn)的信息,第二部分存儲(chǔ)下一個(gè)節(jié)點(diǎn)的地址,最后一個(gè)節(jié)點(diǎn)指向空值。優(yōu)點(diǎn):在單向鏈表中添加和刪除節(jié)點(diǎn)比較簡(jiǎn)單。遍歷時(shí)沒有死循環(huán)。(雙向不會(huì)循環(huán),循環(huán)列表忘記控制,很容易進(jìn)入循環(huán));缺點(diǎn):只能自始至終遍歷。我們只能找到接班人,不能找到先行者,也就是說,我們只能前進(jìn)。雙向鏈表:每個(gè)節(jié)點(diǎn)有2個(gè)鏈接,一個(gè)是前一個(gè)節(jié)點(diǎn)(當(dāng)這個(gè)鏈接是第一個(gè)鏈接時(shí),指向空值或空列表),另一個(gè)是后一個(gè)節(jié)點(diǎn)(當(dāng)這個(gè)鏈接是最后一個(gè)鏈接時(shí),指向空值或空列表)。也就是說,雙向鏈表有兩個(gè)指針,一個(gè)是指向上一個(gè)節(jié)點(diǎn)的指針,另一個(gè)是指向下一個(gè)節(jié)點(diǎn)的指針。優(yōu)點(diǎn):可以找到前驅(qū)和后繼,可以進(jìn)退;缺點(diǎn):添加刪除節(jié)點(diǎn)復(fù)雜。