Java链表基本操作和Java.util.ArrayList
今天做了一道《剑指offer》上的一道编程题“从尾到头打印链表”,具体要求如下:
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
一开始我想的是通过两次遍历链表,第一次遍历得到链表元素的个数count。然后定义一个ArrayList 变量,由于ArrayList是动态数组,不能在未初始化的情况下对任意位置进行插入指定的值。所以只能先对其进行初始化,将count个ArrayList元素赋值为初始值0。随后第二次遍历链表,将遍历得到的值,按照倒序计算出位置i,将ArrayList对应位置i的值设定为该遍历值。后来发现别人大多都是用递归来做的,因为递归的原理是堆栈,先进后出,所以最后实现的堆栈输出顺序正好是从尾到头的顺序。时间复杂度比我的方法要优。
通过今天的做题,发现自己对于Java对单链表的操作以及java.ArrayList()的一些特性不太熟悉,所以想把今天收集到的资料记录一下,让自己能够记得清楚一些。
Java对于单链表的基本操作:
链表是一种常见的数据结构,链表不同于数组,其存储的位置可能不是连续的。所以当我们想要在链表中查找指定位置的结点时,只能去对链表进行遍历。而数组则直接能够通过位置找到相应的元素结点,时间复杂度为O(1)。
单链表的结构如下图所示: