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