算法总结
今天放两道刚刷的关于链表的题

package com.chenghaixiang.jianzhi2.day09; import java.util.ArrayList; import java.util.List; /** * @author 程海翔 * @school 石家庄铁道大学 */ public class Office027 { } //给定一个链表的 头节点 head ,请判断其是否为回文链表。 // //如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。 class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } //最简单方法是使用一个额外的可以访问下标的数据结构,然后复制比对 class Solution { public boolean isPalindrome(ListNode head) { List<Integer> temp=new ArrayList<>(); ListNode cur=head; while (cur!=null){ temp.add(cur.val); cur=cur.next; } int zhizhen1=0; int zhizhen2=temp.size()-1; while (zhizhen1<zhizhen2){ if(!temp.get(zhizhen1).equals(temp.get(zhizhen2))){ return false; } zhizhen1++; zhizhen2--; } return true; } }

package com.chenghaixiang.jianzhi2.day09; /** * @author 程海翔 * @school 石家庄铁道大学 */ public class Office028 { } class Node { public int val; public Node prev; public Node next; public Node child; } //多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 // //给定位于列表第一级的头节点,请扁平化列表,即将这样的多级双向链表展平成普通的双向链表,使所有结点出现在单级双链表中。 class Solution01 { public Node flatten(Node head) { dfs(head); return head; } Node dfs(Node node){ Node cur=node; //// 记录链表的最后一个节点 Node last=null; while (cur!=null){ Node next=cur.next; // 如果有子节点,那么首先处理子节点 if(cur.child!=null){ Node childlast=dfs(cur.child); next=cur.next; // 将 node 与 child 相连 cur.next=cur.child; cur.child.prev=cur; // 如果 next 不为空,就将 last 与 next 相连 if(next!=null){ childlast.next=next; next.prev=childlast; } // 将 child 置为空 cur.child=null; last=childlast; }else { last=cur; } cur=cur.next; } return last; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2020-08-15 每日日报34