【LeetCode 力扣 83】删除排序链表中的重复元素,给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

写在前面

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

学习目标:

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


学习内容:

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


题目描述:

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

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

示例 2:

输入: 1->1->2->3->3
输出: 1->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;
                }
            }else{
    
    
                //将只出现一次的结点放入新链表
                newTail.next=new ListNode(cur.val);
                newTail=newTail.next;
                cur=cur.next;
            }
            
        }
    }

猜你喜欢

转载自blog.csdn.net/zhangxxin/article/details/114588408