c语言 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->3->4->5 输入说明 链表的元素序列 输出说明 删除重复元素后的链表元素序列
时间: 2024-06-04 13:13:10 浏览: 71
作业一 链表 重复结点删除.cpp
可以使用双指针的方法来查找并删除重复的结点。定义一个指针p指向当前不重复的结点,另一个指针q从p的下一个结点开始向后遍历,如果q指向的结点与p指向的结点相同,则不断向后移动q指针直到找到一个不同的结点,然后将p的next指针指向该结点。最后返回链表的头结点即可。
C++代码如下:
ListNode* deleteDuplicates(ListNode* head) {
if (!head) return head;
ListNode *dummy = new ListNode(-1), *p = dummy;
dummy->next = head;
while (p->next) {
ListNode *q = p->next;
while (q && q->val == p->next->val) {
q = q->next;
}
if (q != p->next->next) {
p->next = q;
} else {
p = p->next;
}
}
return dummy->next;
}
这段代码的时间复杂度是O(n),其中n是链表的长度。
阅读全文