两个指针删除单链表中重复元素c
时间: 2024-02-25 12:58:20 浏览: 18
可以使用双指针法来删除单链表中的重复元素c,具体步骤如下:
1. 定义两个指针,分别为 p 和 q,初始时 p 指向链表头节点,q 指向 p 的下一个节点。
2. 遍历链表,当 q 不为空时,比较 p 和 q 所指向节点的值,如果相等,则删除 q 所指向节点,并将 p 的 next 指向 q 的下一个节点;如果不相等,则将 p 和 q 分别移动到下一个节点。
3. 重复步骤2,直到 q 到达链表尾部。
下面是使用 C++ 实现的代码示例:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* deleteDuplicates(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode *p = head, *q = head->next;
while (q) {
if (p->val == q->val) {
p->next = q->next;
delete q;
q = p->next;
} else {
p = q;
q = q->next;
}
}
return head;
}
```