fork download
  1. #include <iostream>
  2. #include <unordered_map>
  3. using namespace std;
  4.  
  5. struct Node {
  6. int data;
  7. Node* next;
  8. };
  9.  
  10. void removeSingles(Node* head) {
  11. unordered_map<int, int> count;
  12. Node* curr = head;
  13. while (curr != nullptr) {
  14. count[curr->data]++;
  15. curr = curr->next;
  16. }
  17.  
  18. curr = head;
  19. Node* prev = nullptr;
  20. while (curr != nullptr) {
  21. if (count[curr->data] == 1) {
  22. if (prev == nullptr) {
  23. head = curr->next;
  24. delete curr;
  25. curr = head;
  26. } else {
  27. prev->next = curr->next;
  28. delete curr;
  29. curr = prev->next;
  30. }
  31. } else {
  32. prev = curr;
  33. curr = curr->next;
  34. }
  35. }
  36. }
  37.  
  38. void printList(Node* head) {
  39. Node* curr = head;
  40. while (curr != nullptr) {
  41. cout << curr->data << " ";
  42. curr = curr->next;
  43. }
  44. cout << endl;
  45. }
  46.  
  47. int main() {
  48. Node* head = new Node{1, new Node{2, new Node{3, new Node{2, new Node{4, new Node{5, nullptr}}}}}};
  49. printList(head);
  50. removeSingles(head);
  51. printList(head);
  52. return 0;
  53. }
  54.  
Success #stdin #stdout 0.01s 5432KB
stdin
Standard input is empty
stdout
1 2 3 2 4 5 
0 263