算法-删除链表重复节点

算法-删除链表重复节点

本题来源于剑指Offer的56题,我想到了一种好的方法,就记录在这里


题目描述:

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

一个易于理解的思路:

1、新建一个辅助的头节点
2、设置当前节点的指针,这个指针可能是重复的也可能不是重复的
3、设置一个不重复节点,指向辅助头节点(认为他是不重复的)
4、比较当前指针和当前指针的下一个值是不是相等
5、如果相等,那么一直找到和当前节点不相同的第一个节点,设置为当前指针
6、如果不相等,那么说明这个节点不是重复节点,把他插入到不重复节点后面
7、循环完成后,将非重复节点后面置为null

Java代码实现:

    public static ListNode deleteDuplication(ListNode pHead){
        ListNode dummy=new ListNode(-1);
        ListNode curr=pHead;
        ListNode noDupHead=dummy;
        while(curr!=null){
            if(curr.next!=null&&curr.val==curr.next.val){
                int val=curr.val;
                while(curr!=null&&curr.val==val){
                    curr=curr.next;
                }
            }else{
                noDupHead.next=curr;
                noDupHead=noDupHead.next;
                curr=curr.next;
            }
        }
        noDupHead.next=null;
        return dummy.next;
    }
发布了28 篇原创文章 · 获赞 9 · 访问量 2420

猜你喜欢

转载自blog.csdn.net/qq_23594799/article/details/104997750
今日推荐