单链表:删除链表中重复的元素

该博客介绍了如何通过使用三个指针(current、pre 和 subHead)来解决删除有序链表中重复元素的问题。解题思路是遍历链表,找到连续相同元素的个数,如果超过1个,则进行删除操作。测试用例包括了不同情况的链表,如 2-2-2-2 和 1-2-2-3-3。此方法能够保持链表的顺序并有效删除重复项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
      删除给出链表中的重复元素(链表元素从小到大有序),删除所有重复的元素。

示例:
      给出的链表为:1->1->2,返回:2 。

      给出的链表为:1→1→2→3→3,返回:2。

解题:

主要思想就是三个指针:

current:遍历的指针

pre:不同val的前置节点

subHead: 重复元素构成的子链表的头节点

    public static final class ListNode{
        public int val;
        public ListNode next;

        public String print() {
            return val+(next!=null?"->"+next.print():"");
        }
    }

    public static ListNode clearDuplicatedNode(ListNode head){
        ListNode current=head;

        ListNode subHead=head;

        ListNode pre=null;

        while(current!=null){
            int c=1;
            current=current.next;
            while(current!=null&&current.val==subHead.val){
                current=current.next;
                c++;
            }
            if (c>1) {
                if(subHead==head){
                    head=current;
                }else{
                    pre.next=current;
                }
            }else {
                pre=subHead;
            }
            subHead=current;
        }
        return head;
    }

测试代码:

输入用例:

2-2-2-2,1-2-2,2-1-1,null,1-2-2-3,1-2-2-3-4-4-5, 1

public static void testClearDuplicatedNode() {
        ListNode head = new ListNode();
        ListNode n2 = new ListNode();
        ListNode n3 = new ListNode();
        ListNode n4 = new ListNode();

        head.val=2;
        n2.val=2;
        n3.val=2;
        n4.val=2;
        head.next=n2;
        n2.next=n3;
        n3.next=n4;

        ListNode listNode = clearDuplicatedNode(head);
        System.out.println("clearDuplicatedNode(head) = " + (listNode==null?"":listNode.print()));
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值