《Java日常练习题,每天进步一点点(34)》是一篇Java编程练习题目的博客文章。该文中提供了10个常见的Java编程问题,供读者进行练习,提高编程水平。以下是对于该文章的详细讲解攻略:
标题
- 标题使用 # 号,# 号的数量代表标题级数
- 需要在每个标题后面空一行
代码块
- 代码块使用 ``` 或者缩进四个空格
- 代码块中的代码可以被正确地渲染
内容
- 内容中需要包含问题描述 ,如要求、输入、输出等
- 对于每个问题,建议提供至少两个示例进行讲解
下面是两个练习题目的详细攻略,供参考:
问题3: 反转一个单链表
题目描述
将一个单链表进行反转。
所需知识点
- 链表
示例
- 输入: 1 -> 2 -> 3 -> 4 -> 5 -> null
输出: 5 -> 4 -> 3 -> 2 -> 1 -> null - 输入: 1 -> null
输出: 1 -> null
解题思路
我们可以定义两个指针:cur 和 pre。我们先让cur指向head,pre指向null。然后不断遍历链表,将cur的next指向它前面的节点(即pre),然后cur和pre都向后移动一位,直到cur为空,此时pre就是我们需要的反转后的链表的头。
代码示例
public ListNode reverse(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
ListNode nextNode = cur.next;
cur.next = pre;
pre = cur;
cur = nextNode;
}
return pre;
}
问题6: 合并两个有序数组
题目描述
输入两个有序数组a和b,请将它们合并成一个有序数组。
所需知识点
- 数组
示例
- 输入:a=[1,3,5], b=[2,4,6]
输出:[1,2,3,4,5,6] - 输入:a=[1,2,3], b=[4,5,6]
输出:[1,2,3,4,5,6]
解题思路
我们将两个有序数组合并成一个有序数组,可以使用双指针的思想,分别指向两个数组的最小值,比较两个数的大小,较小的数加入到新的有序数组中,同时移动该数组的指针,直到有一方遍历完毕。
代码示例
public int[] mergeSortedArray(int[] a, int[] b) {
int m = a.length;
int n = b.length;
int[] res = new int[m+n];
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (a[i] < b[j]) {
res[k++] = a[i++];
} else {
res[k++] = b[j++];
}
}
while (i < m) {
res[k++] = a[i++];
}
while (j < n) {
res[k++] = b[j++];
}
return res;
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java日常练习题,每天进步一点点(34) - Python技术站