83. 删除排序链表中的重复元素

「力扣」83. 删除排序链表中的重复元素

题目描述

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

示例 1:

img

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

示例 2:

img

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

提示:

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

题解

链表是升序的说明重复的值一定是连续的。

  1. 如果链表是空的,或者只有一个节点,则直接返回即可。
  2. 如果链表不是空的,则需要迭代列表。如果当前节点和当前节点的下一个节点值相同,则需要将当前节点的值指向下一个节点的下一个节点。

83. 删除排序链表中的重复元素.drawio

图中两个深绿色的节点值相同,所以应该删除掉后一个,那么就需要将当前节点指向当前节点的下一个的下一个节点current.next = current.next.next。如果两个值不相等的时候,则current节点后移即可。

/**
 * 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 || head.next == null) {
            return head;
        }
        ListNode current = head;
        while(current.next != null) {
            if (current.val == current.next.val) {
                current.next = current.next.next;
            } else {
                current = current.next;
            }
        }
        return head;
    }
}

提交代码到力扣:

提交代码

标签: 83. 删除排序链表中的重复元素

添加新评论