用C语言删除一个链表中的重复结点
时间: 2024-05-11 12:14:47 浏览: 90
可以使用双重循环来遍历链表,比较每一个节点与后面节点的值是否相同,如果相同则删除后面的节点。具体实现可以参考以下代码:
```c
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* deleteDuplicates(struct ListNode* head){
if(head == NULL) return head;
struct ListNode* cur = head;
while(cur != NULL){
struct ListNode* tmp = cur;
while(tmp->next != NULL){
if(tmp->next->val == cur->val){
tmp->next = tmp->next->next;
}else{
tmp = tmp->next;
}
}
cur = cur->next;
}
return head;
}
```
这段代码中,我们使用了两个指针,`cur`指向当前节点,`tmp`指向当前节点的后面一个节点。如果`tmp`的值与`cur`相同,则删除节点;否则`tmp`指向下一个节点,直到链表末尾。接着,`cur`指向下一个节点,继续遍历链表,直至遍历完整个链表。最后返回链表头结点`head`即可。
阅读全文