題目描述輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。 答案有三種思路, 第一就是利用棧先入后出的特性完成, 第二就是存下來然后進(jìn)行數(shù)組翻轉(zhuǎn)。 第三是利用遞歸。
// 數(shù)組反轉(zhuǎn)實(shí)現(xiàn)方式 ![]()
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 來源:??途W(wǎng) java 遞歸超簡潔版本 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可以理解成前一個節(jié)點(diǎn)地址,插入順序: 1、頭節(jié)點(diǎn)傳入,開始創(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é)一下:插入時候,一直在頭節(jié)點(diǎn)的上面插入數(shù)據(jù),原來的數(shù)據(jù)被“頂”上去了; 頭插法遍歷的時候,頭節(jié)點(diǎn)開始,一個一個往上遍歷。這樣最后插入的就作為第一個輸出出來了; 尾插法編練插入,比較好理解,就是一直在“尾巴”追加,遍歷時候從頭開始,第一個插入的就第一個輸出出來; public class Test { |
|