Java 单向链表去重复节点
一个印象深刻的问题:Java单向链表去掉重复节点,记录一下
首先明确链表存储的节点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private class Node{ private int val; private Node next; public Node( int i, Node head){ this .val = i; this .next = head; } public Node( int i){ this (i, null ); } } |
要去重的是数据和结构为这样的一个链表:1-2-2-3-3-3-4-null
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Node test(Node head) { // 声明一个临时对象用来存储当前节点的下一个节点 Node temp; // 如果当前节点不为 null while ( head != null ) { // 将当前节点的下一个节点赋值给 temp temp = head.next; // 如果 temp 不为null 且 当前节点的val和下个节点的val相等,则进行去重操作 if (temp != null && head.val == temp.val) { // 直接干掉当前节点的下一个节点,将下一个节点的指针指向下下个节点 head.next = temp.next; } else { // 如果 temp 为null 或 val不相等,则将当前节点的指针指向下一个节点 head = temp; } } } |
总结:判断节点是否为空,如果不为空判断下一个节点是否为空,如果两个节点都不为空,则判断两个节点的val值是否相等,如果val值相等,则 “ 自己干掉自己 ” ,将指针指向下下个节点,这样就达到去重的目的了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?