【LeetCode 力扣 82】删除排序链表中的重复元素Ⅱ, 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

写在前面

本题与下面这道题目极其相似,读者可对比阅读,加深印象
题目博客连接

学习目标:

目标:熟练运用Java所学知识


学习内容:

本文内容:使用Java实现:删除排序链表中的重复元素Ⅱ


题目描述:

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

输入: 1->1->1->2->3
输出: 2->3

解题思路

  • 首先创建新的链表(带傀儡),用于存放返回结果
ListNode newHead=new ListNode(0);//创建带傀儡的新链表
ListNode newTail=newHead;//记录链表的尾结点
  • 通过循环,逐个的判断当前结点的val是否与下一个结点的相同
while(cur!=null){
    //判断当前结点与下一个结点是否相同
    if(cur.next!=null&&cur.val==cur.next.val){
        //当下一个结点与当前结点相同时,跳过当前结点,直到下一个节点与当前结点不相同
        while(cur!=null&&cur.next!=null&&cur.val==cur.next.val){
            cur=cur.next;
        }
    }else{
        //将只出现一次的结点放入新链表
        newTail.next=new ListNode(cur.val);
        newTail=newTail.next;
    }
    cur=cur.next;//因为这个题目要求不保留重复元素,所以需要加上这条语句
}

实现代码

public static ListNode deleteDuplicates(ListNode head) {
    ListNode cur=head;
	ListNode newHead=new ListNode(0);//创建带傀儡的新链表
	ListNode newTail=newHead;//记录链表的尾结点
	while(cur!=null){
	    //判断当前结点与下一个结点是否相同
	    if(cur.next!=null&&cur.val==cur.next.val){
	      //当下一个结点与当前结点相同时,跳过当前结点,直到下一个节点与当前结点不相同
	        while(cur!=null&&cur.next!=null&&cur.val==cur.next.val){
	            cur=cur.next;
	        }
	         cur=cur.next;//因为这个题目要求不保留重复元素,所以需要加上这条语句
	    }else{
	        //将只出现一次的结点放入新链表
	        newTail.next=new ListNode(cur.val);
	        newTail=newTail.next;
	         cur=cur.next;
	    }
	   
	}
	return newHead.next;//返回新链表,因为带傀儡,所以从第二个节点返回
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值