1、从尾到头打印链表

我的未来我决定 提交于 2020-01-09 18:30:26

题目描述:
  输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

解题思路:
方法一:借助栈
方法二:递归,后面的先进入arraylist
方法三:列表的插入方法,每次都插入到首位

代码实现:

package offer.linkedlist;
import java.util.ArrayList;
import java.util.Stack;
public class PrintList {
    public static void main(String[] args) {
        ListNode listNode1=new ListNode(1);
        ListNode listNode2=new ListNode(2);
        ListNode listNode3=new ListNode(3);
        ListNode listNode4=new ListNode(4);
        ListNode listNode5=new ListNode(5);
        listNode1.next=listNode2;
        listNode2.next=listNode3;
        listNode3.next=listNode4;
        listNode4.next=listNode5;
        ArrayList<Integer> integers1 = printlist1(listNode1);
        System.out.println("栈方式:");
        for(int a:integers1)
            System.out.println(a);
        System.out.println("递归方式:");
        ArrayList<Integer> integers2 = printlist2(listNode1);
        for(int a:integers1)
            System.out.println(a);
        System.out.println("列表的首位插入方式:");
        ArrayList<Integer> integers3 = printlist3(listNode1);
        for(int a:integers1)
            System.out.println(a);
    }
    //方法一:借助栈的后入先出实现
    public static ArrayList<Integer> printlist1(ListNode listNode){
        ArrayList<Integer> list=new ArrayList<>();
        if(listNode==null) return list;
        ListNode head=listNode;
        Stack<ListNode> stack=new Stack<>();
        while(head!=null){
            stack.push(head);//进栈
            head=head.next;
        }
        while(!stack.isEmpty()){
            ListNode temp = stack.pop();//出栈,并返回元素
            list.add(temp.val);
        }
        return list;
    }
    //方法二:递归实现
    public static ArrayList<Integer> printlist2(ListNode listNode){
        ArrayList<Integer> list=new ArrayList<>();
        getnext(listNode,list);
        return list;
    }

    private static void getnext(ListNode listNode, ArrayList<Integer> list) {
        if(listNode!=null){
            getnext(listNode.next,list);
            list.add(listNode.val);
        }
    }
    //方法三:列表的首位插入
    public static ArrayList<Integer> printlist3(ListNode listNode){
        ArrayList<Integer> list=new ArrayList<>();
        if(listNode==null)
            return list;
        ListNode head=listNode;
        while(head!=null){
            list.add(0,head.val);//数组每次插入数据时,都插入到首位
            head=head.next;
        }
        return list;
    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!