57 lines
1.8 KiB
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;
|
||
|
}
|
||
|
}
|