转: 单链表反转
??Java實(shí)現(xiàn)單鏈表翻轉(zhuǎn)
? ? 【轉(zhuǎn)自】http://blog.csdn.net/guyuealian/article/details/51119499(一)單鏈表的結(jié)點(diǎn)結(jié)構(gòu):? ????data域:存儲(chǔ)數(shù)據(jù)元素信息的域稱(chēng)為數(shù)據(jù)域;
? ??next域:存儲(chǔ)直接后繼位置的域稱(chēng)為指針域,它是存放結(jié)點(diǎn)的直接后繼的地址(位置)的指針域(鏈域)。
? ??data域+ next域:組成數(shù)據(jù)ai的存儲(chǔ)映射,稱(chēng)為結(jié)點(diǎn);
? ??注意:①鏈表通過(guò)每個(gè)結(jié)點(diǎn)的鏈域?qū)⒕€性表的n個(gè)結(jié)點(diǎn)按其邏輯順序鏈接在一起的。
? ? ? ? ? ②每個(gè)結(jié)點(diǎn)只有一個(gè)鏈域的鏈表稱(chēng)為單鏈表(Single Linked List)。
? ? ?所謂的鏈表就好像火車(chē)車(chē)廂一樣,從火車(chē)頭開(kāi)始,每一節(jié)車(chē)廂之后都連著后一節(jié)車(chē)廂。
? ? ?要實(shí)現(xiàn)單鏈表存儲(chǔ),首先是創(chuàng)建一結(jié)點(diǎn)類(lèi),其Java代碼如下:[java]?view plaincopy
??(1)遞歸反轉(zhuǎn)法:在反轉(zhuǎn)當(dāng)前節(jié)點(diǎn)之前先反轉(zhuǎn)后續(xù)節(jié)點(diǎn)。這樣從頭結(jié)點(diǎn)開(kāi)始,層層深入直到尾結(jié)點(diǎn)才開(kāi)始反轉(zhuǎn)指針域的指向。簡(jiǎn)單的說(shuō)就是從尾結(jié)點(diǎn)開(kāi)始,逆向反轉(zhuǎn)各個(gè)結(jié)點(diǎn)的指針域指向,其過(guò)程圖如下所示:
? ?head:是前一結(jié)點(diǎn)的指針域(PS:前一結(jié)點(diǎn)的指針域指向當(dāng)前結(jié)點(diǎn))
? ?head.getNext():是當(dāng)前結(jié)點(diǎn)的指針域(PS:當(dāng)前結(jié)點(diǎn)的指針域指向下一結(jié)點(diǎn))
? ?reHead:是反轉(zhuǎn)后新鏈表的頭結(jié)點(diǎn)(即原來(lái)單鏈表的尾結(jié)點(diǎn))
Java代碼實(shí)現(xiàn):[java]?view plaincopy
? ?pre:上一結(jié)點(diǎn)
? ?cur:?當(dāng)前結(jié)點(diǎn)
? ?tmp:?臨時(shí)結(jié)點(diǎn),用于保存當(dāng)前結(jié)點(diǎn)的指針域(即下一結(jié)點(diǎn))
Java代碼實(shí)現(xiàn):[java]?view plaincopy
?
總結(jié)
- 上一篇: 多并发-最后刷新页面
- 下一篇: 从源码编译InfluxDB