给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
解题思路
- 设置哨兵节点 prev
- 找到本次重复元素的下一个节点 p1
代码实现
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteDuplicates = function(head) {
let node = new ListNode(0)
node.next = head
let prev = node
let cur = head
while(cur && cur.next){
if(cur.val == cur.next.val){
let p1 = cur.next
while(p1 && p1.val==cur.val){
p1 = p1.next
}
prev.next = p1
cur = p1
}else{
cur = cur.next
prev = prev.next
}
}
return node.next
};
性能
时间复杂度:
空间复杂度: