JZ6 从尾到头打印链表

题目:

思路:

【1】思路一:先是遍历一遍链表压入栈中,然后从栈中弹出到数组中。利用了栈的先进后出的特性来实现从尾到头的顺序返回。

【2】思路二:利用递归的方式,利用调用栈叠加的方式,先从最末尾的节点开始处理,最后处理头节点。

代码展示:

public class ListNode {
    public int val;
    public ListNode next = null;

    public ListNode(int val) {
        this.val = val;
    }

}

//从尾到头打印链表
public class JZ6 {

    public static void main(String[] args) {
        ListNode Node1,Node2,Node3,Node4;
        Node1 = new ListNode(1);
        Node2 = new ListNode(2);
        Node1.next = Node2;
        Node3 = new ListNode(3);
        Node2.next = Node3;
        Node4 = new ListNode(4);
        Node3.next = Node4;

        System.out.println(Method1(Node1));

    }


    //利用数组的的头插法实现【运行时间  244ms  占用内存  17888KB】
    public static ArrayList<Integer> Method2(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        while (listNode!=null){
            list.add(0,listNode.val);
            listNode = listNode.next;
        }
        return list;
    }

    //利用递归实现【运行时间  239ms  占用内存  19512KB】
    public static ArrayList<Integer> Method1(ListNode listNode) {
        if (listNode == null){
            ArrayList<Integer> dlist = new ArrayList<Integer>();
            return dlist;
        }else {
            ArrayList<Integer> dlist = Method1(listNode.next);
            dlist.add(listNode.val);
            return dlist;
        }
    }
    //常见的递归方式【运行时间  203ms  占用内存  18704KB】
    public static ArrayList<Integer> lists = new ArrayList();
    public ArrayList<Integer> Method11(ListNode listNode) {
        if(listNode!=null){
            Method11(listNode.next);
            lists.add(listNode.val);
        }
        return lists;
    }
    
}

 

posted @ 2022-12-20 17:01  忧愁的chafry  阅读(37)  评论(0编辑  收藏  举报