难度:中等
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/
存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除链表中所有存在数
字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
输入:head = [1,1,1,2,3]
输出:[2,3]
/**
* 一次遍历
* @desc 时间复杂度 O(N) 空间复杂度 O(1)
* @param head
*/
export function deleteDuplicates(head: ListNode | null): ListNode | null {
if (!head) return head;
const dummy = new ListNode(0, head);
let cur = dummy;
while (cur && cur.next && cur.next.next) {
if (cur.next.val === cur.next.next.val) {
const x = cur.next.val;
// 去重
while (cur.next && cur.next.val === x) {
cur.next = cur.next.next;
}
} else {
cur = cur.next;
}
}
return dummy.next;
}