剑指offer3 从头到尾打印链表

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

 

package z_jzoffer.jz3;

/**
 * @author houChen
 * @date 2020/8/18 11:24
 * @Description:
 */
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
package z_jzoffer.jz3;

/**
 *输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
 */
import java.util.ArrayList;
import java.util.List;

public class Solution3 {

    public ArrayList printListFromTailToHead(ListNode listNode) {

        //保存返回的结果
        ArrayList list = new ArrayList<>();

        //获取链表的长度
        int len = 0;
        ListNode cur = listNode;
        while(cur!=null){
            len++;
            cur=cur.next;
        }

        //从后向前取出链表中的元素放入list中
        int count = 1; //计数器
        cur = listNode;
        while(true){
            if(len<1){
                break; //链表中的元素取完了
            }
            if(count==len){ // 如果找到了第len个元素,就找len-1个元素
                list.add(cur.val);
                len--;
                count=1;
                cur=listNode;
                continue;
            }
            count++;
            cur = cur.next;
        }
        return list;
    }
}
package z_jzoffer.jz3;

import java.util.ArrayList;

/**
 * @author houChen
 * @date 2020/8/18 11:40
 * @Description:
 */
public class Solution3Test {
    public static void main(String[] args) {
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        node1.next=node2;
        node2.next=node3;
        node3.next = node4;

        Solution3 s = new Solution3();
        ArrayList list = s.printListFromTailToHead(node1);
        for(Integer ele : list){
            System.out.println(ele);
        }
    }
}

 

你可能感兴趣的:(剑指offer3 从头到尾打印链表)