链表去重c语言
时间: 2023-06-21 07:15:43 浏览: 141
C语言数据结构实现链表去重的实例
链表去重可以通过遍历链表,对于每一个节点,检查后续节点是否与当前节点值相同,如果相同则删除后续节点。可以按照以下步骤实现:
1. 定义一个指针p指向链表的头节点head,再定义一个指针q指向p的下一个节点。
2. 遍历链表,对于每一个节点p,从q开始往后遍历,如果发现节点的值和p相同,则删除该节点,即将p的next指向该节点的next,同时释放该节点的内存空间。
3. 重复步骤2直至遍历到链表末尾。
以下是代码实现:
```c
void removeDuplicates(struct Node* head) {
struct Node *p, *q, *dup;
p = head;
/* Pick elements one by one */
while (p != NULL && p->next != NULL) {
q = p;
/* Compare the picked element with rest of the elements */
while (q->next != NULL) {
/* If duplicate then delete it */
if (p->data == q->next->data) {
dup = q->next;
q->next = q->next->next;
free(dup);
}
else {
q = q->next;
}
}
p = p->next;
}
}
```
该函数的时间复杂度为O(n^2),空间复杂度为O(1)。
阅读全文