在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->3->4->5使用c语言
时间: 2024-05-27 13:14:08 浏览: 105
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplication(struct ListNode* head) {
if (head == NULL || head->next == NULL) { // 如果链表为空或只有一个节点,直接返回
return head;
}
struct ListNode* pre = NULL; // 记录当前节点的前一个节点
struct ListNode* cur = head; // 当前节点
while (cur != NULL) {
if (cur->next != NULL && cur->val == cur->next->val) { // 当前节点与下一个节点值相等
while (cur->next != NULL && cur->val == cur->next->val) { // 一直往后找到与当前节点不相等的节点
cur = cur->next;
}
if (pre == NULL) { // 如果当前节点为头节点
head = cur->next;
} else {
pre->next = cur->next;
}
} else {
pre = cur;
}
cur = cur->next;
}
return head;
}
阅读全文