pta删除链表中的重复数据
时间: 2023-06-22 17:31:16 浏览: 116
删除单链表的重复元素
4星 · 用户满意度95%
这是一个经典的链表操作问题,可以使用双指针来解决。
具体的思路是:使用两个指针p和q,p指向链表的头结点,q指向p的下一个节点。如果p和q的值相等,则将q删除,否则将p和q同时向后移动一个节点。
具体的代码实现可以参考以下示例:
```C++
#include <iostream>
#include <unordered_set>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* deleteDuplicates(ListNode* head) {
if (head == NULL) {
return NULL;
}
ListNode dummy(0);
dummy.next = head;
ListNode *p = &dummy, *q = head;
while (q != NULL) {
if (p->val == q->val) {
p->next = q->next;
q = q->next;
} else {
p = p->next;
q = q->next;
}
}
return dummy.next;
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(2);
head->next->next->next = new ListNode(3);
head->next->next->next->next = new ListNode(4);
head->next->next->next->next->next = new ListNode(4);
head->next->next->next->next->next->next = new ListNode(5);
ListNode* result = deleteDuplicates(head);
while (result != NULL) {
cout << result->val << " ";
result = result->next;
}
cout << endl;
return 0;
}
```
此代码的时间复杂度为$O(n)$,其中$n$是链表的长度。
阅读全文