赞
踩
java IDE是没有ListNode,ListNode类是力扣题目给你提供的自定义的节点类,LinkedList是java原生的双向链表类,节点类Node存在于内部,从外部访问不到。
区别是节点类提供next或/和pre字段访问前后节点,而链表类是把节点类封装起来了,给你提供获取节点的方法,比如你调用get(n),链表类就帮你从头节点挨个next到这个节点给你返回。链表类基于节点类实现。
public class ListNode{
public int val;
public ListNode next;
public ListNode(int val){
this.val=val;
}
}
用哨兵节点简化链表插入操作
public ListNode append(ListNode head,int val){
ListNode dummy=new ListNode(0);//建立哨兵节点
dummy.next=head;//在哨兵节点后面添加head
ListNode newNode=new ListNode(val);
ListNode node=dummy;
while(node.next!=null){
node=node.next;
}
node.next=newNode;
return dummy.next;
}
用哨兵节点简化链表删除操作(哨兵节点的好处是也可以删除头结点)
public static ListNode delete(ListNode head,int value){ ListNode dummy=new ListNode(0); dummy.next=head;//将head插到dummy后面 ListNode node=dummy; while(node.next!=null){ if(node.next.value==value){ node.next=node.next.next; break;//找到删除节点就删除了,不再继续循环下去 } node=node.next; } return dummy.next; }
在java中,哈希表有两个对应的类型,即HashSet和HashMap。如果每个元素都只有一个值,则用HashSet,HashSet在图搜索时经常用来存储已经搜索过的节点。如果每个元素都存在一个值到另一个值的映射,那么用HashMap。例如:如果不仅要存储一个文档中的所有单词,同时还关心每个单词在文档中出现的位置,则可以考虑用HashMap。
HashSet常用函数
函数 | 函数功能 |
---|---|
add | 在HashSet中添加一个元素 |
contains | 判断HashSet中是否包含一个元素 |
remove | 从HashSet中删除一个元素 |
size | 返回HashSet中 元素的数目 |
HashMap常用函数
containsKey | 判断HashMap中是否包含某个键 |
---|---|
get | 如果键存在,则返回对应的值,否则返回null |
getOrDefault | 如果键存在,则返回对应的值,否则返回输入的默认值 |
put | 如果键不存在,则添加一组键到值的映射,否则修改键对应的值 |
putIfAbsent | 当键不存在时添加一组键到值的映射 |
remove | 删除某个键 |
replace | 修改某个键对应的值 |
size | 返回HashMap中键到值的映射数目 |
不一定都要用哈希表解决问题。如果对数据集中的元素排序能够有助于解决问题,那么用TreeSet或TreeMap更合适。如果需要知道一个动态数据集中的最大值和最小值,那么堆的效率可能更好。如果希望能够根据前缀进行单词查找,如查找字典中所有以“ex”开头的单词,那么应该用前缀树作为实现字典的数据结构。
函数 | 函数功能 |
---|---|
push(e) | 元素e入栈 |
pop | 位于栈顶的元素出栈,并返回该元素 |
peek | 返回栈顶的元素,该元素不出栈 |
Stack<Integer> times=new Stack<>();
操作 | 抛异常 |
---|---|
插入元素 | add(e) |
删除元素 | remove |
返回最前面的元素 | element |
操作 | 不抛异常 |
插入元素 | offer(e) |
删除元素 | poll |
返回最前面的元素 | peek |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。