题目地址:
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
给定一个有序链表,返回将其中重复的元素全部删除的新链表。比如如果链表是 ( 1 , 1 , 2 , 3 , 3 , 4 , 5 ) (1,1,2,3,3,4,5) (1,1,2,3,3,4,5),那么返回 ( 2 , 4 , 5 ) (2,4,5) (2,4,5),凡是出现过两次或以上的节点都删。
直接依次判断每个节点的值是否只连续出现了一次,如果是则append到一个准备好的链表尾部,否则略过。代码如下:
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *dummy = new ListNode(0), *prev = dummy;
while (head) {
int x = head->val;
if (!head->next || head->next->val != x) prev->next = head, prev = head;
while (head && head->val == x) head = head->next;
}
prev->next = nullptr;
return dummy->next;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。