java删除链表中重复的结点

1.题目

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

2.分析

  1. 重复的节点不止一个;排好序,又有重复的结点,那么结点肯定挨着的。、
  2. 定义cur指向头结点;定义一个中间结点newHead,定义一个引用tmp指向这个节点,所有不重复的结点就挂在这个节点后面。
  3. cur不为空就进入循环,当cur.next!=null,并且cur.val==cur.next.val,进入循环,当cur.next!=null,并且cur.val==cur.next.valcur=cur.next;
  4. cur.next!=null,并且cur.val==cur.next.val不成立时候,tmp.next = cur;tmpcur向后移动,
  5. 最后防止最后一个节点也是重复的,应该tmp.next = null;
  6. 最后返回头结点return newHead.next

3.具体步骤

最后一个结点不重复:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后一个结点是重复的结点,如果上面的例子最后一个56也是34:

在这里插入图片描述

4.代码

 //删除链表中重复的结点
    public ListNode deleteDuplication() {
        ListNode cur = head;
        ListNode newHead = new ListNode(-1);
        ListNode tmp = newHead;
        while (cur != null) {
            if (cur.next != null && cur.val == cur.next.val) {
                while (cur.next != null && cur.val == cur.next.val) {
                    cur = cur.next;
                }
                cur = cur.next;
            } else {
                tmp.next = cur;
                tmp = tmp.next;
                cur = cur.next;
            }
        }
        //防止最后一个节点也是重复的
        tmp.next = null;
        return newHead.next;
    }

测试:

  public static void main(String[] args) {
        MyLinkedList myLinkedList1 = new MyLinkedList();
        myLinkedList1.addLast(12);
        myLinkedList1.addLast(23);
        myLinkedList1.addLast(34);
        myLinkedList1.addLast(34);
        myLinkedList1.addLast(56);
        System.out.println("myLinkedList1:");
        myLinkedList1.display();

        myLinkedList1.deleteDuplication();
        System.out.println("删除重复结点:");
        myLinkedList1.display();

    }

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值