LeetCode/com/zerroi/leetcode/Three25/DeleteDuplicates.java

57 lines
1.8 KiB
Java

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;
}
}