题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates (ListNode head) { if (head == null || head.next == null) { return head; } // 记录删减后的节点 ListNode res = new ListNode(-101); // 记录遍历过的节点值集合 Set<Integer> set = new HashSet<>(); // 记录当前节点 ListNode dump = res; while (head != null) { int headValue = head.val; ListNode next = head.next; if (next == null) { // 当前节点的值在集合中未出现且下一个节点为null,将其保留 if (!set.contains(headValue)) { dump.next = head; dump = dump.next; } } else { // 当前节点的值在集合中未出现且不等于下一个节点的值,将其保留 if (!set.contains(headValue) && headValue != next.val) { // 切断当前节点和后续节点的联系 head.next = null; dump.next = head; dump = dump.next; } set.add(headValue); } head = next; } return res.next; } }