给定一个链表,判断链表中是否有环。
上期的问题是:140,只出现一次的数字
1public int singleNumber(int[] nums) {
2 for (int i = 1; i < nums.length; i++)
3 nums[0] ^= nums[i];
4 return nums[0];
5}
解析:
其实这道题可以有多种解法,
1,一种是使用HashMap存储,key为存储的数字,value为数字出现的次数,然后找出value值为1的key即可。
2,还一种方式是在存储的时候如果HashMap中有就remove,如果没有就add,所以最后HashMap中只有一对,并且就是我们要查找的。
3,还一种方式是使用两个循环,一个是遍历数字的位,一个是遍历数字,用一个数n存储,遇到0的时候不变,遇到1的时候改当前位的值,原来是1就变为0,原来是0就变为1,这样遍历完之后n就是我们要查找的值。
上面几种方式虽然都能实现,但都还不是最简单的,其实最简单的就是异或运算,因为相同的两个数异或结果为0,0与任何数字异或的结果都为原来的数字,所以上面代码是最简洁也是最容易理解的。