Skip to content

Commit 2ba31fe

Browse files
committed
feat: add cpp solution to lc problem: No.1836. Remove Duplicates From an Unsorted Linked List
1 parent 29cf626 commit 2ba31fe

File tree

4 files changed

+105
-12
lines changed

4 files changed

+105
-12
lines changed

solution/1800-1899/1836.Remove Duplicates From an Unsorted Linked List/README.md

+38-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ None
1212

1313
<!-- 这里可写通用的实现逻辑 -->
1414

15+
“哈希表”实现。
16+
1517
<!-- tabs:start -->
1618

1719
### **Python3**
@@ -60,15 +62,13 @@ class Solution:
6062
*/
6163
class Solution {
6264
public ListNode deleteDuplicatesUnsorted(ListNode head) {
63-
ListNode cur = head;
6465
Map<Integer, Integer> counter = new HashMap<>();
65-
for (; cur != null; cur = cur.next) {
66+
for (ListNode cur = head; cur != null; cur = cur.next) {
6667
counter.put(cur.val, counter.getOrDefault(cur.val, 0) + 1);
6768
}
6869

6970
ListNode dummy = new ListNode(0, head);
70-
ListNode pre = dummy;
71-
for (cur = head; cur != null; cur = cur.next) {
71+
for (ListNode pre = dummy, cur = head; cur != null; cur = cur.next) {
7272
if (counter.get(cur.val) > 1) {
7373
pre.next = cur.next;
7474
} else {
@@ -80,6 +80,40 @@ class Solution {
8080
}
8181
```
8282

83+
### **C++**
84+
85+
```cpp
86+
/**
87+
* Definition for singly-linked list.
88+
* struct ListNode {
89+
* int val;
90+
* ListNode *next;
91+
* ListNode() : val(0), next(nullptr) {}
92+
* ListNode(int x) : val(x), next(nullptr) {}
93+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
94+
* };
95+
*/
96+
class Solution {
97+
public:
98+
ListNode* deleteDuplicatesUnsorted(ListNode* head) {
99+
unordered_map<int, int> counter;
100+
for (ListNode* cur = head; cur != nullptr; cur = cur->next) {
101+
++counter[cur->val];
102+
}
103+
104+
ListNode* dummy = new ListNode(0, head);
105+
for (ListNode* pre = dummy, *cur = head; cur != nullptr; cur = cur->next) {
106+
if (counter[cur->val] > 1) {
107+
pre->next = cur->next;
108+
} else {
109+
pre = cur;
110+
}
111+
}
112+
return dummy->next;
113+
}
114+
};
115+
```
116+
83117
### **...**
84118

85119
```

solution/1800-1899/1836.Remove Duplicates From an Unsorted Linked List/README_EN.md

+36-4
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,13 @@ class Solution:
107107
*/
108108
class Solution {
109109
public ListNode deleteDuplicatesUnsorted(ListNode head) {
110-
ListNode cur = head;
111110
Map<Integer, Integer> counter = new HashMap<>();
112-
for (; cur != null; cur = cur.next) {
111+
for (ListNode cur = head; cur != null; cur = cur.next) {
113112
counter.put(cur.val, counter.getOrDefault(cur.val, 0) + 1);
114113
}
115114

116115
ListNode dummy = new ListNode(0, head);
117-
ListNode pre = dummy;
118-
for (cur = head; cur != null; cur = cur.next) {
116+
for (ListNode pre = dummy, cur = head; cur != null; cur = cur.next) {
119117
if (counter.get(cur.val) > 1) {
120118
pre.next = cur.next;
121119
} else {
@@ -127,6 +125,40 @@ class Solution {
127125
}
128126
```
129127

128+
### **C++**
129+
130+
```cpp
131+
/**
132+
* Definition for singly-linked list.
133+
* struct ListNode {
134+
* int val;
135+
* ListNode *next;
136+
* ListNode() : val(0), next(nullptr) {}
137+
* ListNode(int x) : val(x), next(nullptr) {}
138+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
139+
* };
140+
*/
141+
class Solution {
142+
public:
143+
ListNode* deleteDuplicatesUnsorted(ListNode* head) {
144+
unordered_map<int, int> counter;
145+
for (ListNode* cur = head; cur != nullptr; cur = cur->next) {
146+
++counter[cur->val];
147+
}
148+
149+
ListNode* dummy = new ListNode(0, head);
150+
for (ListNode* pre = dummy, *cur = head; cur != nullptr; cur = cur->next) {
151+
if (counter[cur->val] > 1) {
152+
pre->next = cur->next;
153+
} else {
154+
pre = cur;
155+
}
156+
}
157+
return dummy->next;
158+
}
159+
};
160+
```
161+
130162
### **...**
131163

132164
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
class Solution {
12+
public:
13+
ListNode* deleteDuplicatesUnsorted(ListNode* head) {
14+
unordered_map<int, int> counter;
15+
for (ListNode* cur = head; cur != nullptr; cur = cur->next) {
16+
++counter[cur->val];
17+
}
18+
19+
ListNode* dummy = new ListNode(0, head);
20+
for (ListNode* pre = dummy, *cur = head; cur != nullptr; cur = cur->next) {
21+
if (counter[cur->val] > 1) {
22+
pre->next = cur->next;
23+
} else {
24+
pre = cur;
25+
}
26+
}
27+
return dummy->next;
28+
}
29+
};

solution/1800-1899/1836.Remove Duplicates From an Unsorted Linked List/Solution.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010
*/
1111
class Solution {
1212
public ListNode deleteDuplicatesUnsorted(ListNode head) {
13-
ListNode cur = head;
1413
Map<Integer, Integer> counter = new HashMap<>();
15-
for (; cur != null; cur = cur.next) {
14+
for (ListNode cur = head; cur != null; cur = cur.next) {
1615
counter.put(cur.val, counter.getOrDefault(cur.val, 0) + 1);
1716
}
1817

1918
ListNode dummy = new ListNode(0, head);
20-
ListNode pre = dummy;
21-
for (cur = head; cur != null; cur = cur.next) {
19+
for (ListNode pre = dummy, cur = head; cur != null; cur = cur.next) {
2220
if (counter.get(cur.val) > 1) {
2321
pre.next = cur.next;
2422
} else {

0 commit comments

Comments
 (0)