问题描述:
给定一个已排序的链表的头 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,争取每天搞一道 。
网硕互联帮助中心






评论前必须登录!
注册