題目描述輸入一個(gè)鏈表,按鏈表從尾到頭的順序返回一個(gè)ArrayList。 答案有三種思路,第一就是利用棧先入后出的特性完成,第二就是存下來(lái)然后進(jìn)行數(shù)組翻轉(zhuǎn)。第三是利用遞歸。
// 數(shù)組反轉(zhuǎn)實(shí)現(xiàn)方式 作者:小輝哥哥 鏈接:https://www./questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion 來(lái)源:??途W(wǎng) ![]()
public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list=new ArrayList<Integer>(); ListNode pre=null; ListNode next=null; while(listNode!=null){ next=listNode.next; listNode.next=pre; pre=listNode; listNode=next; } while(pre!=null){ list.add(pre.val); pre=pre.next; } return list; } } 鏈接:https://www./questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion 來(lái)源:牛客網(wǎng) java 遞歸超簡(jiǎn)潔版本public class Solution { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode!=null){ this.printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; }} 創(chuàng)建鏈表相關(guān),頭插法和尾插法
關(guān)于頭插法,可以next可以理解成前一個(gè)節(jié)點(diǎn)地址,插入順序: 1、頭節(jié)點(diǎn)傳入,開(kāi)始創(chuàng)建A數(shù)據(jù),頭節(jié)點(diǎn)的next指向A數(shù)據(jù)的內(nèi)存地址,A節(jié)點(diǎn)的next替換成頭節(jié)點(diǎn)的 2、頭節(jié)點(diǎn)再傳入,創(chuàng)建B數(shù)據(jù),頭節(jié)點(diǎn)的next又換成了指向B的內(nèi)存地址,B節(jié)點(diǎn)的next替換頭節(jié)點(diǎn)的A; 總結(jié)一下:插入時(shí)候,一直在頭節(jié)點(diǎn)的上面插入數(shù)據(jù),原來(lái)的數(shù)據(jù)被“頂”上去了; 頭插法遍歷的時(shí)候,頭節(jié)點(diǎn)開(kāi)始,一個(gè)一個(gè)往上遍歷。這樣最后插入的就作為第一個(gè)輸出出來(lái)了; 尾插法編練插入,比較好理解,就是一直在“尾巴”追加,遍歷時(shí)候從頭開(kāi)始,第一個(gè)插入的就第一個(gè)輸出出來(lái); public class Test { |
|
|
來(lái)自: 行者花雕 > 《待分類(lèi)》