並べ替えチェーンテーブルの重複要素の削除

1578 ワード

ソートチェーンテーブルを指定し、重複するすべての要素を削除して、各要素が一度だけ表示されるようにします.
例1:
  : 1->1->2
  : 1->2

例2:
  :[]
  :[]

問題解1:vectorのeraseメソッドを使用してunique()と協力してソート重複要素を削除する
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) //   vector erase  ,  unique()        
    {   
        if (NULL == head)
            return head;

        vector v;
        struct ListNode* p = head;
        for (; NULL != p; p = p->next)
        {
            v.push_back(p->val);
        }
        v.erase(unique(v.begin(), v.end()), v.end());

        struct ListNode* L = new struct ListNode(v.front());
        v.erase(v.begin());
        p = L;
        struct ListNode* q;
        while (!v.empty())
        {
            q = new struct ListNode(v.front());
            p->next = q;
            p = p->next;
            v.erase(v.begin());
        }

        return L;
    }
};

問題解2:(他人の問題解を参考にする)
    ListNode* deleteDuplicates(ListNode* head) 
    {
        while (nullptr == head)
            return head;

        struct ListNode* p = head;
        struct ListNode* next;
        while (nullptr != p)
        {
            next = p->next;     //    next      
            if (nullptr != next && p->val == next->val)
            {
                p->next = next->next;
                delete next;
            }
            else
            {
                p = p->next;
            }
        }
        return head;
    }