C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のソート済みリストから重複を削除する


ソートされたリンクリストがあるとします。各要素が1回だけ表示されるように、すべての重複を削除する必要があります。

したがって、入力が[1,1,2,3,3,3,4,5,5]の場合、出力は[1,2,3,4,5]

になります。

これを解決するには、次の手順に従います-

  • ダミー:=値-infで新しいノードを作成します

  • ダミーの次:=頭

  • curr=ダミー

  • currがゼロ以外の場合、実行-

    • next =next of curr

    • 一方(nextはnullではなく、nextのvalはcurrのvalと同じです)、do-

      • 次:=次の次

    • 次のcurr:=次へ

    • curr:=next

  • ダミーの次を返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class ListNode{
   public:
      int val;
      ListNode *next;
      ListNode(int data){
         val = data;
         next = NULL;
      }
};
ListNode *make_list(vector<int> v){
   ListNode *head = new ListNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      ListNode *ptr = head;
      while(ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return head;
}
void print_list(ListNode *head){
   ListNode *ptr = head;
   cout << "[";
   while(ptr){
      cout << ptr->val << ", ";
      ptr = ptr->next;
   }
   cout << "]" << endl;
}
class Solution {
public:
   ListNode* deleteDuplicates(ListNode* head) {
      ListNode*dummy = new ListNode(INT_MIN);
      dummy->next = head;
      ListNode * curr = dummy;
      while(curr){
         ListNode * next = curr->next;
         while(next && next->val==curr->val)
            next = next->next;
         curr->next = next;
         curr=next;
      }
      return dummy->next;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,1,2,3,3,3,4,5,5};
   ListNode *head = make_list(v);
   print_list(ob.deleteDuplicates(head));
}

入力

{1,1,2,3,3,3,4,5,5}

出力

[1, 2, 3, 4, 5, ]

  1. Javascriptを使用してリンクリストから要素を削除します

    リンクリストでは、要素の削除は非常に簡単です。削除したいノードを取り除く必要があります。つまり、その参照を失います。考慮する必要がある3つのケースがあります- headから要素を削除する:この場合、head=head.nextを割り当てるだけです。このようにして、最初の要素の参照を失います。そして、頭が2番目の要素を指し始めます。 テールから要素を削除する:この場合、最後から2番目のノードのnode.nextをnullに割り当てるだけで、リストから最後の要素を削除できます。 中間から要素を削除する:これはより注意が必要です。この場合、削除するノードの前にノードを作成し、削除するノードの後に

  2. Androidでソートされたリンクリストから重複を削除するにはどうすればよいですか?

    この例は、Androidでソートされたリンクリストから重複を削除する方法について示しています。 ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。 ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="ht