Java单链表反转
轉(zhuǎn)載自???Java單鏈表反轉(zhuǎn) 詳細過程
(一)單鏈表的結(jié)點結(jié)構(gòu):
? ????data域:存儲數(shù)據(jù)元素信息的域稱為數(shù)據(jù)域;
? ??next域:存儲直接后繼位置的域稱為指針域,它是存放結(jié)點的直接后繼的地址(位置)的指針域(鏈域)。
? ??data域+ next域:組成數(shù)據(jù)ai的存儲映射,稱為結(jié)點;
? ??注意:①鏈表通過每個結(jié)點的鏈域?qū)⒕€性表的n個結(jié)點按其邏輯順序鏈接在一起的。
? ? ? ? ? ②每個結(jié)點只有一個鏈域的鏈表稱為單鏈表(Single Linked List)。
? ? ?所謂的鏈表就好像火車車廂一樣,從火車頭開始,每一節(jié)車廂之后都連著后一節(jié)車廂。
? ? ?要實現(xiàn)單鏈表存儲,首先是創(chuàng)建一結(jié)點類,其Java代碼如下:
[java]?view plain?copy
(二)實現(xiàn)反轉(zhuǎn)的方法:
??(1)遞歸反轉(zhuǎn)法:在反轉(zhuǎn)當前節(jié)點之前先反轉(zhuǎn)后續(xù)節(jié)點。這樣從頭結(jié)點開始,層層深入直到尾結(jié)點才開始反轉(zhuǎn)指針域的指向。簡單的說就是從尾結(jié)點開始,逆向反轉(zhuǎn)各個結(jié)點的指針域指向,其過程圖如下所示:
? ?head:是前一結(jié)點的指針域(PS:前一結(jié)點的指針域指向當前結(jié)點)
? ?head.getNext():是當前結(jié)點的指針域(PS:當前結(jié)點的指針域指向下一結(jié)點)
? ?reHead:是反轉(zhuǎn)后新鏈表的頭結(jié)點(即原來單鏈表的尾結(jié)點)
Java代碼實現(xiàn):
[java]?view plain?copy
?
(2)遍歷反轉(zhuǎn)法:遞歸反轉(zhuǎn)法是從后往前逆序反轉(zhuǎn)指針域的指向,而遍歷反轉(zhuǎn)法是從前往后反轉(zhuǎn)各個結(jié)點的指針域的指向。
? ?基本思路是:將當前節(jié)點cur的下一個節(jié)點 cur.getNext()緩存到temp后,然后更改當前節(jié)點指針指向上一結(jié)點pre。也就是說在反轉(zhuǎn)當前結(jié)點指針指向前,先把當前結(jié)點的指針域用tmp臨時保存,以便下一次使用,其過程可表示如下:
? ?pre:上一結(jié)點
? ?cur:?當前結(jié)點
? ?tmp:?臨時結(jié)點,用于保存當前結(jié)點的指針域(即下一結(jié)點)
?
Java代碼實現(xiàn):
[java]?view plain?copy
總結(jié)
- 上一篇: 在[2022]和#8211中免费学习HT
- 下一篇: 怎么用自己的域名作站(有了域名后怎么建站