Android第四次面试总结(基础算法篇)

一、反转链表

java 复制代码
// 定义链表节点类
class ListNode {
    // 节点存储的值
    int val;
    // 指向下一个节点的引用
    ListNode next;
    // 构造函数,用于初始化节点的值
    ListNode(int x) { val = x; }
}

class Solution {
    // 反转链表的方法
    public ListNode reverseList(ListNode head) {
        // 初始化前一个节点为 null
        ListNode prev = null;
        // 初始化当前节点为头节点
        ListNode current = head;
        // 遍历链表,直到当前节点为 null
        while (current != null) {
            // 保存当前节点的下一个节点
            ListNode nextNode = current.next;
            // 反转当前节点的指针,指向前一个节点
            current.next = prev;
            // 更新前一个节点为当前节点
            prev = current;
            // 更新当前节点为下一个节点
            current = nextNode;
        }
        // 返回反转后链表的头节点
        return prev;
    }

    public static void main(String[] args) {
        // 创建链表 1->2->3->4->5
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);

        // 创建 Solution 类的实例
        Solution solution = new Solution();
        // 反转链表
        ListNode reversedHead = solution.reverseList(head);

        // 打印反转后的链表
        ListNode current = reversedHead;
        while (current != null) {
            System.out.print(current.val);
            if (current.next != null) {
                System.out.print(" -> ");
            }
            current = current.next;
        }
    }
}

二、viewgroup的广度搜索遍历子view(不限制二叉树)

java 复制代码
import android.view.View;
import android.view.ViewGroup;
import java.util.LinkedList;
import java.util.Queue;

/**
 * 该类提供了一个静态方法,用于对 ViewGroup 进行广度优先搜索(BFS)遍历。
 * 广度优先搜索是一种按层次顺序遍历 ViewGroup 及其子 View 的算法。
 */
public class ViewGroupBFS {

    /**
     * 对传入的 ViewGroup 进行广度优先搜索遍历。
     * 遍历过程中会打印每个 View 的简单类名,你可以根据实际需求修改处理逻辑。
     *
     * @param viewGroup 要进行遍历的根 ViewGroup
     */
    public static void traverseViewGroupBFS(ViewGroup viewGroup) {
        // 创建一个队列,用于存储待遍历的 View。
        // 使用 LinkedList 实现 Queue 接口,方便进行入队和出队操作。
        Queue<View> queue = new LinkedList<>();
        // 将传入的根 ViewGroup 添加到队列中,作为遍历的起始点。
        queue.add(viewGroup);

        // 当队列不为空时,继续进行遍历操作。
        while (!queue.isEmpty()) {
            // 从队列的头部取出一个 View 进行处理。
            // poll 方法会移除并返回队列的头部元素,如果队列为空则返回 null。
            View currentView = queue.poll();
            // 处理当前取出的 View。这里只是简单地打印该 View 的简单类名。
            // 你可以根据实际需求修改这部分逻辑,例如更新 UI、执行特定操作等。
            System.out.println("View: " + currentView.getClass().getSimpleName());

            // 检查当前 View 是否为 ViewGroup 类型。
            // 如果是 ViewGroup 类型,说明它可能包含子 View,需要进一步遍历其子 View。
            if (currentView instanceof ViewGroup) {
                // 将当前 View 强制转换为 ViewGroup 类型,以便访问其与子 View 相关的方法。
                ViewGroup currentViewGroup = (ViewGroup) currentView;
                // 获取当前 ViewGroup 包含的子 View 的数量。
                int childCount = currentViewGroup.getChildCount();
                // 遍历当前 ViewGroup 的所有子 View。
                for (int i = 0; i < childCount; i++) {
                    // 获取当前索引位置的子 View。
                    // getChildAt 方法用于根据索引获取 ViewGroup 中的子 View。
                    View childView = currentViewGroup.getChildAt(i);
                    // 将获取到的子 View 添加到队列的尾部,以便后续进行遍历。
                    queue.add(childView);
                }
            }
        }
    }
}    

这是我在Android面试中遇到的算法题 ,希望可以对你有所帮助!!!

感谢观看!!!

相关推荐
前端小白199511 分钟前
面试取经:工程化篇-webpack性能优化之热替换
前端·面试·前端工程化
百度Geek说20 分钟前
第一!百度智能云领跑视觉大模型赛道
算法
洛卡卡了24 分钟前
数据库加密方案实践:我们选的不是最完美,但是真的够用了。
数据库·后端·面试
big_eleven26 分钟前
轻松掌握数据结构:二叉树
后端·算法·面试
big_eleven29 分钟前
轻松掌握数据结构:二叉查找树
后端·算法·面试
CoovallyAIHub39 分钟前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·计算机视觉
Java水解1 小时前
Java最新面试题(全网最全、最细、附答案)
java·后端·面试
Java水解1 小时前
java开发面试题(10个常问面试题含答案,亲测有效)
java·后端·面试
檀越剑指大厂1 小时前
容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
android
kyle~2 小时前
OpenCV---特征检测算法(ORB,Oriented FAST and Rotated BRIEF)
人工智能·opencv·算法