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值相等,则 “ 自己干掉自己 ” ,将指针指向下下个节点,这样就达到去重的目的了。

 

posted @   安逺  阅读(266)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示