在C ++中从排序列表II中删除重复项

假设我们有一些元素的列表。我们必须删除所有已发生多次的元素。因此,只有不同的元素将保留在列表中。因此,如果列表类似于[1,1,1,2,2,3,5,6,6,7,8],则输出将为[3,5,7,8],所有其他元素都存在不止一次。

让我们看看步骤-

  • 创建一个值为-1的虚拟节点,prev:= NULL,dummyPtr:= dummy

  • 而head不为null

    • 上一个:=头,另一个头:=下一个头

    • 而head不为空且head的值= prev的值

    • 上一页:=头部和头部:=头部的下一个

    • 下一个dummyPtr:=头

    • temp:=头部的下一个,并使头部的下一个为空

    • 头:=温度

    • dummyPtr:=下一个dummyPtr

    • 如果存在head的下一个节点或head的值与下一个节点的值不同,则

    • 除此以外

    • 返回下一个假人

    让我们看下面的实现以更好地理解-

    示例

    #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(-1);
          ListNode* prev = NULL;
          ListNode* dummyPtr = dummy;
          ListNode* nextNode;
          while(head){
             if(!head->next || head->val != head->next->val){
                dummyPtr->next = head;
                ListNode* temp = head->next;
                head->next = NULL;
                head = temp;
                dummyPtr = dummyPtr->next;
             } else {
                prev = head;
                head = head->next;
                while(head && head->val == prev->val){
                   prev = head;
                   head = head->next;
                }
             }
          }
       return dummy->next;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {1,1,1,2,2,3,5,6,6,7,8};
       ListNode *head = make_list(v);
       print_list(ob.deleteDuplicates(head));
    }

    输入值

    [1,1,1,2,2,3,5,6,6,7,8]

    输出结果

    [3, 5, 7, 8, ]