LeetCode: 82. Remove Duplicates from Sorted List II
LeetCode: 82. 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
ソートされたチェーンテーブルに一度しか表示されない要素をフィルタします.
問題を解く構想——再帰的に解くは、現在のノードの要素が一度しか現れないかどうかを判断し、もしそうであれば、第3のステップに進む.そうでなければ、2番目のステップを行います. 現在のノード要素と等しいノードを順次削除し、現在のノードを削除します.第3歩に入る. は、現在のノードの
ACコード
タイトルの説明
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
. ソートされたチェーンテーブルに一度しか表示されない要素をフィルタします.
問題を解く構想——再帰的に解く
next
ノードに対して第1ステップの動作を行う.ACコード
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// ,
while(head != nullptr && head->next != nullptr && head->val == head->next->val)
{
//
while(head != nullptr && head->next != nullptr && head->val == head->next->val)
{
ListNode* tmp = head->next;
head->next = head->next->next;
delete tmp;
}
//
ListNode* tmp = head;
head = head->next;
delete tmp;
}
// next
if(head != nullptr)
{
head->next = deleteDuplicates(head->next);
}
return head;
}
};