Java实现:二维数组查找、替换空格及倒序打印链表

5星 · 超过95%的资源 需积分: 13 120 下载量 194 浏览量 更新于2024-07-20 4 收藏 48KB DOCX 举报
"这是一个Java编程相关的资源,包含了对《剑指Offer》书中部分编程题目的解决方案。题目涵盖了数组查找、字符串处理和链表操作等基础算法和数据结构问题。" 在提供的代码片段中,我们看到了三个Java函数,分别解决以下问题: 1. **二维数组中的查找**:给定一个按特定顺序排列的二维数组,目标是查找是否存在某个整数。这个问题可以通过二分查找的方法优化。首先,初始化一个布尔变量`found`为`false`,表示尚未找到目标。然后,从数组的第一行最后一列开始查找,利用数组的有序性进行比较。如果当前元素等于目标,则设置`found`为`true`并结束查找;如果当前元素大于目标,向左移动列指针;否则,向上移动行指针。这个方法的时间复杂度是O(log(min(m, n))),其中m是行数,n是列数。 2. **替换空格**:要求将字符串中的每个空格替换为"%20"。这个问题可以通过遍历字符串并检查每个字符来解决。对于非空格字符,直接添加到新字符串`str2`中;遇到空格时,连续添加'%'、'2'和'0'。最后返回`str2`。注意,原字符串不可变,因此需要创建一个新的字符串来存储结果,时间复杂度为O(n),其中n是字符串长度。 3. **从尾到头打印链表**:这道题要求逆序输出链表的节点值。为实现这一功能,我们可以使用迭代或递归的方法。迭代版本通常涉及维护两个指针,一个指向当前节点,另一个指向前一个节点。从头节点开始,遍历链表,直到到达尾部。然后,反向遍历之前记录的节点,打印它们的值。递归版本则可以先递归地处理后继节点,然后输出当前节点的值。这里的代码没有给出完整的实现,但注释中提供了链表节点的定义,可以基于此编写打印函数。 这三个题目是典型的算法面试题,涉及到了基本的数据结构操作和问题解决策略,对于提升编程技能和准备面试非常有帮助。在实际编程过程中,理解这些算法并能灵活运用,有助于解决各种复杂问题。