删除链表中的节点
描述:
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
思路:
没有头结点,所以无法通过前驱指向后继来删除,转化为删除node后继节点的方式,不改变地址只改变值
(1)把node后继的值赋给node
(2)把node后继设为node.next = node.next.next
代码:
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
存在重复元素
描述:
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true
。如果数组中每个元素都不相同,则返回 false
。
思路:
重复使用Set
(1)特殊值处理
(2)创建HashSet
(3)循环遍历数组,若当前元素不能插入了,代表重复了,返回true
(4)循环结束代表没有,返回false
代码:
class Solution {
public boolean containsDuplicate(int[] nums) {
if(nums.length < 2) return false;
HashSet<Integer> set = new HashSet<>();
for(int num : nums){
if(set.contains(num)){
return true;
}else{
set.add(num);
}
}
return false;
}
}