Given the head
of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.
Example 1:
Input: head = [1,2,3,3,4,4,5] Output: [1,2,5]
Example 2:
Input: head = [1,1,1,2,3] Output: [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.
题目链接:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
题目大意:有序链表,删除全部重复的元素
题目分析:循环查找下一节点,遇到重复的跳过,为统一查找逻辑,加一个helper节点作为头结点
1ms,时间击败40.48%
/**
* 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 {
private ListNode findNextNode(ListNode head) {
while (head.next != null && head.val == head.next.val) {
head = head.next;
}
return head.next;
}
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode helper = new ListNode(-1000);
helper.next = head;
ListNode ans = helper;
while (helper != null) {
ListNode nxt = findNextNode(helper);
while (nxt != null) {
if (nxt.next != null && nxt.val == nxt.next.val) {
nxt = findNextNode(nxt);
} else {
break;
}
}
helper.next = nxt;
helper = nxt;
}
return ans.next;
}
}