Leetcode 83. Remove Duplicates from Sorted List-从有序链表中删除重复节点,重复的节点只保留一个

144 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

Given the head of a sorted linked list,

delete all duplicates such that each element appears only once

. Return

the linked list sorted as well

.

Example 1:

Input: head = [1,1,2]
Output: [1,2]

Example 2:

Input: head = [1,1,2,3,3]
Output: [1,2,3]

Constraints:

  • The number of nodes in the list is in the range [0, 300].

  • -100 <= Node.val <= 100

  • The list is guaranteed to be sorted in ascending order.

    package com.linkedlist;

    /**

    • @Author you guess

    • @Date 2022/4/1 17:17

    • @Version 1.0

    • @Desc 删除重复节点(如果有2个节点值相同,只保留1个节点;重复的节点只保留一个) */ public class Leetcode_83_RemoveDuplicatesfromSortedList {

      public static void main(String[] args) { ListNode node72 = new ListNode(7, null); ListNode node7 = new ListNode(7, node72); ListNode node6 = new ListNode(6, node7); ListNode node5 = new ListNode(5, node6); ListNode node42 = new ListNode(4, node5); ListNode node41 = new ListNode(4, node42); ListNode node40 = new ListNode(4, node41); ListNode node3 = new ListNode(3, node40); ListNode node22 = new ListNode(2, node3); ListNode node21 = new ListNode(2, node22); ListNode node20 = new ListNode(2, node21); ListNode node11 = new ListNode(1, node20); ListNode node1 = new ListNode(1, node11); Leetcode_83_RemoveDuplicatesfromSortedList main = new Leetcode_83_RemoveDuplicatesfromSortedList(); main.printListNode(main.deleteDuplicates(node1)); }

      /**

      • Runtime: 0 ms, faster than 100.00% of Java online submissions for Remove Duplicates from Sorted List.

      • Memory Usage: 41.6 MB, less than 94.40% of Java online submissions for Remove Duplicates from Sorted List.

      • 每次:head与head.next值相等时,pre.next = head.next

      • head与head.next值不相等时,pre=最后一个重复值,head=下一个值

      • @param head

      • @return */ public ListNode deleteDuplicates(ListNode head) { ListNode sentinel = new ListNode(0, head); ListNode pre = sentinel; while (head != null) { if (head.next != null && head.val == head.next.val) { pre.next = head.next; head = head.next; } else { pre = pre.next; //pre指向的链表也是连续的 head = head.next; } } return sentinel.next; }

      public void printListNode(ListNode head) { while (head != null) { System.out.println(head.val); head = head.next; } }

    }

end