如何用C语言删除链表里相同的数据
时间: 2024-03-12 20:44:33 浏览: 65
删除链表里相同的数据需要遍历整个链表,然后比对每个节点的数据是否相同,如果相同则删除该节点。可以采用双指针法来实现,一个指针指向当前节点,另一个指针遍历链表寻找相同的节点并删除。
下面是一个示例代码:
```c
void deleteSameNode(struct Node* head) {
struct Node *p, *q, *prev;
p = head;
while (p != NULL) {
prev = p;
q = p->next;
while (q != NULL) {
if (q->data == p->data) {
prev->next = q->next;
free(q);
q = prev->next;
} else {
prev = q;
q = q->next;
}
}
p = p->next;
}
}
```
其中,`struct Node` 是链表节点的结构体,包含了数据和指向下一个节点的指针。在函数中,`p` 指向当前节点,`q` 指向下一个节点,`prev` 指向 `p` 的前一个节点。遍历链表时,如果发现 `q` 的数据和 `p` 相同,则将 `q` 删除,并更新前一个节点的指针;否则就顺着链表继续往下遍历。