LeetCode:Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,

Given 1->2->3->3->4->4->5, return 1->2->5.

Given 1->1->1->2->3, return 2->3

解題思路:

方法1:可以使用遞歸法來解決,時間複雜度爲O(n),空間複雜度爲O(1)。

代碼如下:

ListNode *deleteDuplicates(ListNode *head) {
	if(!head || !head->next) {
		return head;
	}
	ListNode *p = head->next;
	if(head->val == p->val) {
		while(p && head->val == p->val) {
			ListNode *tmp = p;
			p = p->next;
			delete tmp;
		}
		delete head;
		return deleteDuplicates(p);
	} else {
		head->next = deleteDuplicates(head->next);
		return head;
	}
}

方法2:使用迭代法,時間複雜度爲O(n),空間複雜度爲O(1)

ListNode *deleteDuplicates(ListNode *head) {
	if(head == nullpstr) {
		return head;
	}
	ListNode dummy(INT_MIN);
	dummy.next = head;
	ListNode *pre = &dummy;
	ListNode *cur = head;
	while(cur != nullpstr) {
		bool duplicated = false;
		while(cur->next != nullpstr && cur->val == cur->next->val) {
			duplicated = true;
			ListNode *tmp = cur;
			cur = cur->next;
			delete tmp;
		}
		if(duplicated) {
			ListNode *temp = cur;
			cur = cur->next;
			delete tmp;
			continue;
		}
		pre->next = cur;
		pre = pre->next;
		cur = cur->next;	
	}
	pre->next = cur;
	return dummy.next;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章