【Java-数据结构】Java 链表面试题上 “最后一公里”:解决复杂链表问题的致胜法宝

【Java-数据结构】Java 链表面试题上 “最后一公里”:解决复杂链表问题的致胜法宝
在这里插入图片描述

我的个人主页
我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤

在这里插入图片描述


在这里插入图片描述
引言:
Java链表,看似简单的链式结构,却蕴含着诸多有趣的特性与奥秘,等待我们去挖掘。它就像一个神秘的宝藏迷宫,每一个特性都是隐藏在迷宫深处的珍贵宝藏。链表的环,如同迷宫中的循环通道,一旦进入,便可能陷入无尽的循环;链表节点的唯一性与重复性,仿佛迷宫中的岔路,有的道路独一无二,有的却似曾相识;而链表的长度变化,又如同迷宫的动态扩展与收缩。在接下来的题目中,你将化身为勇敢的探险家,深入链表特性的迷宫,运用你的编程智慧,解开一个个谜题。通过检测链表的环、分析节点的重复性以及精准计算链表长度,你将逐渐揭开链表神秘的面纱,领略数据结构背后的奇妙逻辑。

1. 删除链表中等于给定值 val 的所有节点。移除链表元素

题目视图:
在这里插入图片描述


相关代码:

packageDemo1_22;/** * Created with IntelliJ IDEA. * Description: * User:Lenovo * Date:2025-01-22 * Time:20:56 */classListNode{int val;ListNode next;ListNode(int val){this.val = val;}}classRemoveLinkedListElements{publicListNoderemoveElements(ListNode head,int val){// 处理头节点为 null 的情况while(head!=null&& head.val == val){ head = head.next;}ListNode curr = head;// 遍历链表while(curr!=null&& curr.next!=null){if(curr.next.val == val){ curr.next = curr.next.next;}else{ curr = curr.next;}}return head;}publicstaticvoidmain(String[] args){// 创建链表 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6ListNode node1 =newListNode(1);ListNode node2 =newListNode(2);ListNode node3 =newListNode(6);ListNode node4 =newListNode(3);ListNode node5 =newListNode(4);ListNode node6 =newListNode(5);ListNode node7 =newListNode(6); node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5; node5.next = node6; node6.next = node7;RemoveLinkedListElements solution =newRemoveLinkedListElements();// 调用 removeElements 方法,删除值为 6 的节点ListNode newHead = solution.removeElements(node1,6);// 打印删除节点后的链表元素ListNode curr = newHead;while(curr!=null){System.out.print(curr.val +" "); curr = curr.next;}}}

2.给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。反转链表

题目视图
在这里插入图片描述


题目详解代码:

packageDemo1_22;/** * Created with IntelliJ IDEA. * Description: * User:Lenovo * Date:2025-01-23 * Time:18:24 */classListNode{int val;ListNode next;ListNode(int val){this.val = val;}}publicclassReverseLinkedList{publicListNodereverseList(ListNode head){ListNode prev =null;ListNode current = head;while(current !=null){ListNode nextTemp = current.next; current.next = prev; prev = current; current = nextTemp;}return prev;}publicstaticvoidmain(String[] args){// 构建链表 1 -> 2 -> 3 -> 4 -> 5ListNode head =newListNode(1);ListNode node2 =newListNode(2);ListNode node3 =newListNode(3);ListNode node4 =newListNode(4);ListNode node5 =newListNode(5); head.next = node2; node2.next = node3; node3.next = node4; node4.next = node5;ReverseLinkedList solution =newReverseLinkedList();ListNode reversedHead = solution.reverseList(head);while(reversedHead !=null){System.out.print(reversedHead.val +" "); reversedHead = reversedHead.next;}}}
在这里插入图片描述

3.给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。链表的中间节点

题目视图:
在这里插入图片描述

题目讲解代码:

packageDemo1_22;/** * Created with IntelliJ IDEA. * Description: * User:Lenovo * Date:2025-01-23 * Time:18:30 */classListNode{int val;ListNode next;ListNode(int val){this.val = val;}}publicclassMiddleOfLinkedList{publicListNodemiddleNode(ListNode head){ListNode slow = head;ListNode fast = head;while(fast !=null&& fast.next !=null){ slow = slow.next; fast = fast.next.next;}return slow;}publicstaticvoidmain(String[] args){// 构建链表 1 -> 2 -> 3 -> 4 -> 5ListNode head =newListNode(1);ListNode node2 =newListNode(2);ListNode node3 =newListNode(3);ListNode node4 =newListNode(4);ListNode node5 =newListNode(5); head.next = node2; node2.next = node3; node3.next = node4; node4.next = node5;MiddleOfLinkedList solution =newMiddleOfLinkedList();ListNode middle = solution.middleNode(head);System.out.println(middle.val);}}
在这里插入图片描述

4.实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。返回倒数第k个结点的值

题目视图:

题目详解代码:

packageDemo1_22;/** * Created with IntelliJ IDEA. * Description: * User:Lenovo * Date:2025-01-23 * Time:18:33 */classListNode{int val;ListNode next;ListNode(int val){this.val = val;}}publicclassFindKthFromEnd{publicintfindKthFromEnd(ListNode head,int k){ListNode slow = head;ListNode fast = head;// 先让fast指针前进k步for(int i =0; i < k; i++){if(fast ==null){return-1;// 链表长度小于k,可根据实际情况调整返回值} fast = fast.next;}// 然后slow和fast同时前进,直到fast到达链表末尾while(fast !=null){ slow = slow.next; fast = fast.next;}return slow.val;}publicstaticvoidmain(String[] args){// 构建链表 1 -> 2 -> 3 -> 4 -> 5ListNode head =newListNode(1);ListNode node2 =newListNode(2);ListNode node3 =newListNode(3);ListNode node4 =newListNode(4);ListNode node5 =newListNode(5); head.next = node2; node2.next = node3; node3.next = node4; node4.next = node5;FindKthFromEnd solution =newFindKthFromEnd();int k =2;int result = solution.findKthFromEnd(head, k);System.out.println("链表中倒数第 "+ k +" 个节点的值是: "+ result);}}
在这里插入图片描述

5.将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

合并两个升序链表

题目视图:

题目详解代码:

packageDemo1_22;/** * Created with IntelliJ IDEA. * Description: * User:Lenovo * Date:2025-01-23 * Time:18:36 */classListNode{int val;ListNode next;ListNode(int val){this.val = val;}}publicclassMergeTwoSortedLists{publicListNodemergeTwoLists(ListNode list1,ListNode list2){ListNode dummy =newListNode(0);ListNode current = dummy;while(list1 !=null&& list2 !=null){if(list1.val < list2.val){ current.next = list1; list1 = list1.next;}else{ current.next = list2; list2 = list2.next;} current = current.next;}if(list1 !=null){ current.next = list1;}if(list2 !=null){ current.next = list2;}return dummy.next;}publicstaticvoidmain(String[] args){// 构建链表1: 1 -> 2 -> 4ListNode list1 =newListNode(1); list1.next =newListNode(2); list1.next.next =newListNode(4);// 构建链表2: 1 -> 3 -> 4ListNode list2 =newListNode(1); list2.next =newListNode(3); list2.next.next =newListNode(4);MergeTwoSortedLists solution =newMergeTwoSortedLists();ListNode mergedList = solution.mergeTwoLists(list1, list2);while(mergedList !=null){System.out.print(mergedList.val +" "); mergedList = mergedList.next;}}}
在这里插入图片描述


今天的链表题目就到这了,还有五到下篇见;

在这里插入图片描述

Read more

OpenClaw:让AI直接操控你的电脑

有安全风险;可接入本地大模型 1. OpenClaw 到底是什么? 你可以把它理解成:一个能直接控制你电脑的 AI 助手。 普通 AI(ChatGPT、豆包、文心一言): * 只能跟你聊天 * 只能告诉你怎么做 * 不能碰你电脑里的任何东西 OpenClaw: * 是能动手操作你电脑的 AI * 能自己点开文件、写代码、运行程序、点鼠标、改设置 * 就像雇了一个会用电脑的人,坐在你电脑前帮你干活 一句话:普通 AI 是 “嘴强王者”,OpenClaw 是 “真能干活”。 2. 它能帮你做什么?(超直白举例) 你直接用自然说话,它就能自己干: ✅ 写代码 / 改项目 * 你说:“帮我写一个登录页面” * 它自己新建文件、写代码、保存、运行 * 你不用动手敲一行 ✅ 操作电脑文件

By Ne0inhk
OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜

OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜 * 1 GPT-5.3 Instant 发布 * 2 本次升级三大核心能力 * 2.1 降低 AI 幻觉 * 2.2 减少不必要拒答 * 2.3 网络搜索能力升级 * 3 GPT-5.3 Instant 技术架构 * 4 GPT-5.3 vs

By Ne0inhk
人工智能多模态模型开发与应用:跨越文本、图像与语音的融合实践

人工智能多模态模型开发与应用:跨越文本、图像与语音的融合实践

一、人工智能多模态模型开发与应用:跨越文本、图像与语音的融合实践 1.1 本章学习目标与重点 💡 掌握多模态模型的核心概念与技术原理,理解文本、图像、语音等不同模态数据的融合逻辑; 💡 熟练运用主流多模态框架(Hugging Face Transformers、MMEngine、LangChain Multimodal),实现跨模态理解与生成任务; 💡 精通多模态模型的开发流程,包括数据预处理、模型选型、训练微调、部署落地等关键环节; 💡 通过真实场景案例(图文生成、跨模态问答、语音助手),掌握多模态技术从原型到产品的端到端落地能力。 ⚠️ 重点关注:多模态数据的对齐与预处理、模型训练的显存优化、生成内容的一致性与准确性、以及不同部署场景下的性能适配。 1.2 多模态模型基础:概念、技术与生态 随着人工智能技术的发展,单一模态(如纯文本、纯图像)模型已难以满足复杂场景需求。多模态模型通过融合文本、图像、语音、视频等多种模态数据,实现更全面的理解与更灵活的生成,成为当前

By Ne0inhk