云计算百科
云计算领域专业知识百科平台

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

问题描述:

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

示例 1:

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

示例 2:

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

提示:

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

上代码,拿去即可运行:

package com.onlyqi.daydayup01.leetcode;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Objects;

public class Leetcode82 {
public static void main(String[] args) {

ListNode head5 = new ListNode(5);
ListNode head41 = new ListNode(4,head5);
ListNode head4 = new ListNode(4,head41);
ListNode head3 = new ListNode(3,head4);
ListNode head21 = new ListNode(3, head3);
ListNode head2 = new ListNode(2, head21);
ListNode head1 = new ListNode(1, head2);
ListNode head = deleteDuplicates(head1);
while (!Objects.isNull(head)) {
System.out.println(head.val);
head = head.next;
}

}

public static ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode dummy = new ListNode(0); // 哑结点 (dummy node),简化代码
dummy.next = head;

ListNode prev = dummy;
ListNode curr = head;

// 1 2 3 3 4 4 5
while (curr != null) {
if (curr.next != null && curr.next.val == curr.val) {
int val = curr.val;
// 寻找最后一个相等的节点
while (curr != null && curr.val == val) {
curr = curr.next;
}
prev.next = curr;
} else {
prev = curr;
curr = curr.next;
}
}
return dummy.next;
}

@Data
@AllArgsConstructor
static class ListNode {
int val;
ListNode next;

public ListNode(int val) {
this.val = val;
this.next = null;
}
}
}

运行结果:

我要刷300道算法题,第155道 。 尽快刷到200,争取每天搞一道  。 

赞(0)
未经允许不得转载:网硕互联帮助中心 » 82. 删除排序链表中的重复元素 II
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!