下面是Java实习打卡8道面试题的完整攻略。
1. 如何取数组中的随机数?
可以使用Java内置的Math.random()
方法来取得一个0到1之间的随机数,然后根据数组长度与所需随机数的范围进行计算即可。
int[] nums = {1, 2, 3, 4, 5};
int range = 3; // 从数组中取3个随机数
int[] randomNums = new int[range];
for (int i = 0; i < range; i++) {
int randomIndex = (int) (Math.random() * (nums.length - i));
randomNums[i] = nums[randomIndex];
nums[randomIndex] = nums[nums.length - 1 - i];
}
以上代码中,通过循环生成3个随机数,并将它们保存到randomNums
数组中。每次循环,取一个0
到nums.length-i
之间的随机数作为数组下标获取相应元素,并将这个元素从原数组中移除,直到取完3个随机数。
2. 如何判断单链表是否是回文?
单链表是一种链式存储结构,由一系列节点组成,每个节点包含一个数据元素与一个指向下一节点的指针。回文是指正着读与倒着读都一样,因此,判断单链表是否是回文,可以采用以下步骤:
- 用快慢指针找到单链表的中间节点。
- 反转链表后半部分。
- 比较前半部分与后半部分是否相同。
public boolean isPalindrome(ListNode head) {
if (head == null || head.next == null) {
return true;
}
ListNode slow = head, fast = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
}
ListNode cur = slow.next, pre = null, next;
while (cur != null) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
while (pre != null) {
if (head.val != pre.val) {
return false;
}
head = head.next;
pre = pre.next;
}
return true;
}
以上代码中,首先用快慢指针找到链表中间节点。然后反转链表后半部分。最后比较前半部分与反转后的后半部分是否相同。如果都相同,则链表是回文,返回true
,否则返回false
。
示例:
对于链表 1->2->2->1
,最终反转后的链表为1<-2<-2
,比较之后发现前半部分和后半部分完全相同,因此符合回文的特性,返回true
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实习打卡8道面试题 - Python技术站