剑指offer系列之一:从尾到头打印链表-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

剑指offer系列之一:从尾到头打印链表

简介:

题目描述:
给定一个链表,从尾部到头部打印输出链表结点的值。看到这个题目我的基本思路是:首先遍历一遍链表,统计出结点的个数,然后进行第二次遍历把每次访问的结点的值方到一个临时数组中,遍历结束之后,该临时数组中的值与正向遍历链表的值的顺序是一样的。那么在第三次遍历的时候,把上面的临时数组拷贝到另外一个临时数组中,只不过这次拷贝是从最后一个位置的值开始拷贝的,这样第三次遍历结束之后,第二个临时数组中的值的顺序就是从尾到头遍历链表的值的顺序了。最后一次遍历就是把第二个临时数组转化为一个ArrayList对象,并返回。

已知如下条件:

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

下面是我未参照书上的解法自己实现的,时间复杂度也是O(n)。下面是在牛客OJ提交成功的代码:

package com.rhwayfun.offer;

import java.util.ArrayList;
import java.util.List;

/**
 * 题目描述:从尾到头打印链表
 * @author Administrator
 *
 */
public class PrintLinkListFromTailToFront {

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

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

    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        int len = 0, i = 0;
        ListNode temp = listNode;
        while (listNode!= null) {
            ++len;
            listNode = listNode.next;
        }
        Integer[] nodes = new Integer[len];
        while (temp!= null) {
            nodes[i++] = temp.val;
            temp = temp.next;
        }
        Integer[] nodes2 = new Integer[len];
        for (int j = 0; j < nodes.length; j++) {
            nodes2[len - 1 -j] = nodes[j];
        }
        ArrayList<Integer> list = new ArrayList<Integer>();
        for(int j = 0;j<nodes.length;j++){
            list.add(j, nodes2[j]);
        }
        return list;
    }

    public static void main(String[] args) {
        ListNode root = new ListNode(1);
        ListNode node1 = new ListNode(2);
        ListNode node2 = new ListNode(3);
        ListNode node3 = new ListNode(4);

        root.next = node1;
        node1.next = node2;
        node2.next = node3;

        List<Integer> list = new PrintLinkListFromTailToFront().printListFromTailToHead(root);
        for (Integer integer : list) {
            System.out.print(integer + "\t");
        }
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章
最新文章
相关文章