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 1->2->3->3->4->4->5 , return 1->2->5 . Given 1->1->1->2->3 , return 2->3 .
ソートされたチェーンテーブルに一度しか表示されない要素をフィルタします.
問題を解く構想——再帰的に解く
  • は、現在のノードの要素が一度しか現れないかどうかを判断し、もしそうであれば、第3のステップに進む.そうでなければ、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;
        }
    };