0
点赞
收藏
分享

微信扫一扫

【LeetCode每日一题打卡】83、删除链表中的重复元素

伢赞 2022-03-12 阅读 163

前言


文章目录

83、删除链表中的重复元素

🔊问题描述

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

🏀示例一

请添加图片描述

输入:head = [1,1,2]
输出:[1,2]

🏀示例二

请添加图片描述

输入:head = [1,1,2,3,3]
输出:[1,2,3]

👓提示

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序排列

🥇代码示例

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null){
            return head;
        }
        // 其实就是新建了一个新的链表结点指向了头节点
        ListNode list = new ListNode(0,head);
        // 将这个结点指向新建立结点的下一节点,也就是题中所给的头节点
        ListNode firstNode = list;
        // 加这个判断说明链表还没到头
        while(firstNode.next != null && firstNode.next.next != null){
            // 如果是第一个元素(即是链头元素)==第二个元素
            if(firstNode.next.val == firstNode.next.next.val){
                // 将第一个相等的元素存储起来,因为可能相等的不止两个数
                int temp = firstNode.next.val;
                // 此题相比较82题的基础,在循环判断条件上就多加了.next,就起到了保护一个重复元素的作用
                while(firstNode.next.next != null && firstNode.next.next.val == temp){
                    // 如果下一个元素的值还是与其相等的话,直接再次指向下一个给结点然后进行判断
                    firstNode.next = firstNode.next.next;
                }
            }else{
                // 改变firstNode的位置,而不是将其next指向下一个next,前者是改变结点位置,后者是将中间的元素进行删除的操作。
                firstNode = firstNode.next;
            }
        }
        // list是空的结点,返回从头指针开始,即是list.next
        return list.next;
    }

举报

相关推荐

0 条评论