为了实习与秋招,立下flag两个月刷完剑指offer!ヾ(◍°∇°◍)ノ゙因为现在个人熟练度java>c++>python,所以代码都用java来写,有的题可能会用python,仅以此系列博文作为记录,所有代码均通过测试。
================================================================
题目描述
思路
利用栈的思想,最初我就是老老实实写了链表的反转,后来发现有大神写的递归,真的不要太简洁!速度也更快呢,还是要多多学习~
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arr=new ArrayList<Integer>();
ArrayList<Integer> ans=new ArrayList<Integer>();
while(listNode!=null){
arr.add(listNode.val);
listNode=listNode.next;
}
int n=arr.size();
for(int j=0;j<n;j++){
ans.add(arr.get(n-j-1));
}
return ans;
}
}
运行时间:25ms
占用内存:8732k
Java简洁递归版public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}
运行时间:14ms
占用内存:9436k
复习:ArrayList的增删改查
1. ArrayList的增加方法
ArrayList使用方法add()对表进行元素添加
add(E e)是先通过ensureCapacityInternal()方法实现自身容量的增加一,为添加进来的元素提供存储的位置。然后把要添加的数据添加到elementDate[]的尾部。这个方法是布尔类型,在最后返回true。
add(int index, E element) 将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。方法首先判断指定位置index是否超出elementData的界限,然后通过通过ensureCapacityInternal()方法实现自身容量的增加一,然后用System.arraycopy()将index位置右侧的元素全部右移一位。把要插入的元素加入到index位置后,size增大一。
2. ArrayList的删除方法
remove是删除元素的方法
public E remove(int index)移除此列表中指定位置上的元素。向左移动所有后续元素(将其索引减 1)。 方法先判断是否越界,修改modCount的值,保存被删除的数据,产生新的数组的长度。然后把index位置右侧的元素全部左移一位,接着把末尾的元素置为null,并把大小-1,。最后返回的是被删除的数据
public boolean remove(Object o)移除此列表中首次出现的指定元素(如果存在)。如果列表不包含此元素,则列表不做改动。这个方法的代码在返回结果上有true和false两种,对应删除对象是否成功。remove(Object o)中通过遍历element寻找是否存在传入对象,一旦找到就调用fastRemove移除对象。
public void clear()移除此列表中的所有元素。此调用返回后,列表将为空。clear()方法只是将表的元素全部置为空,并不修改表的长度。
3. ArrayList的修改方法
set是修改元素的方法
public E set(int index, E element)用指定的元素替代此列表中指定位置上的元素。 首先检查范围,用新元素替换旧元素并返回旧元素。
4. ArrayList的查找方法
public E get(int index)返回此列表中指定位置上的元素。 先检查越界,然后直接返回index位置的数据。