package com.zerroi.leetcode.Three25; public class DeleteDuplicates { public static void main(String[] args) { // ListNode head = constructLinkedList(new int[]{1, 2, 3, 3, 4, 4, 5}); ListNode head = constructLinkedList(new int[]{1, 1}); SolutionSecond solutionSecond = new SolutionSecond(); ListNode res = solutionSecond.deleteDuplicates(head); while (res != null) { System.out.println("res.val = " + res.val); res = res.next; } } public static ListNode constructLinkedList(int[] nums) { if (nums == null || nums.length == 0) { return null; } ListNode dummy = new ListNode(); // 创建一个虚拟头节点 ListNode current = dummy; for (int num : nums) { current.next = new ListNode(num); current = current.next; } return dummy.next; // 返回真正的头节点 } } class SolutionSecond { public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode dummy = new ListNode(-1); dummy.next = head; // pre指针为cur的前驱节点 ListNode pre = dummy; // cur为当前节点 ListNode cur = head; while (cur != null && cur.next != null) { // 如果出现当前节点的值等于其下一节点值,要一直循环找到不相等的 if (cur.val == cur.next.val) { int duplicate = cur.val; while (cur != null && cur.val == duplicate) { cur = cur.next; } pre.next = cur; } else { pre = pre.next; cur = cur.next; } } return dummy.next; } }