從頭打印一個鏈表

題目描述:

輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。。

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        
    }
}

思路

第一種思路

從頭到尾遞歸輸出,遞歸是屬於棧的一種思想,其實就是倒序往ArrayList裏面進行壓入;
如果我們想實現正序,只需要把壓入ArrayList的操作在遞歸函數之前就可以了。

第二種思路

任何一種遞歸都能用循環寫出來,所以第二種方法就是使用循環實現。

代碼實現

第一種思路

import java.util.ArrayList;
public class Main {
   static ArrayList<Integer> arrayList = new ArrayList<>();
    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);
        ListNode listNode11 = new ListNode(2);
        ListNode listNode12 = new ListNode(3);
        listNode.next = listNode11;
        listNode11.next = listNode12;
        arrayList = printListFromTailToHead(listNode);
    }
    public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if(listNode != null)
        {
            printListFromTailToHead(listNode.next);
            arrayList.add(listNode.val);//上下兩行交換順序就可以實現正序
        }
        return arrayList;
    }
}
class ListNode
{
    int val;
    ListNode next = null;
    ListNode(int val) {
        this.val = val;
    }
}

第二種思路

每次插入list的時候都在頭上插入,這種方式java實現是通過向後移插入後面的元素,所以每次這樣效率會很低。

 public  ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        while (listNode!=null)
        {
            arrayList.add(0,listNode.val);//這種方式java實現是通過向後移插入後面的元素,所以每次這樣效率會很低。
            listNode = listNode.next;
        }
        return arrayList;
    }

順序插入完後,進行反轉。

 public  ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        while (listNode!=null)
        {
            listNode = listNode.next;
        }
        Collections.reverse(arrayList);//使用Collections的reverse方法,直接將list反轉,這樣只操作一次,不需要再每次去後移,相對而言效率好一點。
        return arrayList;
    }

歡迎關注我的個人博客zenshin’blog

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章