给定一个已排序的链表head , 删除原始链表中所有重复数字的节点,返回执行删除后的链表 。【保证链表已经按升序排列】】(c语言)
时间: 2024-05-03 13:21:07 浏览: 111
好的,我能够回答这个问题。这个问题属于数据结构和算法的范畴。我们需要遍历这个链表,判断当前节点的值是否与上一个节点的值相同,如果相同,则删除这个节点;否则继续向后遍历。这里需要注意的是,头节点可能会被删除,因此我们需要使用一个虚拟头节点来简化链表的操作。具体实现过程可以参考以下的C语言代码:
```
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
if (!head) {
return NULL;
}
struct ListNode* dummy = malloc(sizeof(struct ListNode));
dummy->val = -1;
dummy->next = head;
struct ListNode* prev = dummy;
struct ListNode* curr = head;
while (curr) {
if (curr->next && curr->next->val == curr->val) {
while (curr->next && curr->next->val == curr->val) {
curr = curr->next;
}
prev->next = curr->next;
} else {
prev = prev->next;
}
curr = curr->next;
}
return dummy->next;
}
```
阅读全文