算法练-环形链表
题目给定一个链表,判断链表中是否有环。 如果链表中存在环,就返回true。否则,返回false。 方法一:哈希表思路这个方法就是遍历整个链表中的所有节点,每遍历一个节点就判断它此前是否被访问过 用哈希表来存储已经访问过的节点,之后每到达一个节点时,如果该节点已经在哈希表里,就说明这个链表中有环 否则就把这个节点存入进去,重复这么一个过程,直到整个链表被遍历完 代码实现import java.util.*;//哈希表判断链表中是否有环public class test { public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node node5 = new Node(5); hea ...
算法练-反转单链表
题目给单链表的头节点 head ,请反转链表,并返回反转后的链表。 示例输入:head = [1,2,3,4,5]输出:[5,4,3,2,1] 方法一: 双指针迭代思路 首先要引入两个指针,分别是prev和curr,因为要把链表反转,那么就必须对next做文章,通过curr指针让当前节点的next指向上一个节点,而上一个节点由prev指针来表示。指向更改后两个指针往后移位。 但是在这里有一个问题,就是当curr.next->prev后,如图,节点1和节点2之间就断开了,那么curr指针就无法进行后移操作,所以我们还需要一个临时变量next,在将curr.next->prev前,先将curr的下一个节点暂时保存在这个临时变量next中,等第一个节点反转之后,prev后移,再将next里的值给到curr实现其后移。 代码实现//迭代法实现反转链表public class test { public static void main(String[] args) ...
算法练-两数之和
题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 方法一: 暴力枚举思路通过枚举数组中的每一个数,组合来查找是否有适合target的两个整数 设两个数分别是x , y,他们的下标是i , j 两个循环,第一个找一个x,x前面的数都和x匹配过了,所以只需要去找x后面的数,即从j=i+1开始找y 找到了x和y就可以将两个下标输出 代码实现//暴力枚举找出两数之和public class test { public static void main(String[] args) { int nums[] = new int[]{2, 7, 11, 15}; ...