class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* temp=head;
while(temp && temp->next!=nullptr){
if(temp->val==temp->next->val){
temp->next=temp->next->next;
}else{
temp=temp->next;
}
}
return head;
}
};
-
首先,创建一个指向链表头部的指针
temp
用于遍历链表。 -
进入一个循环,条件是
temp
不为空且temp
的下一个节点不为空。这是因为在循环中需要比较当前节点和下一个节点的值,所以需要确保这两个节点都存在。 -
在循环内部,检查当前节点
temp
的值是否等于下一个节点的值(即是否是重复元素)。如果是重复元素,就将当前节点的next
指针指向下一个节点的下一个节点,以跳过这个重复节点。这个步骤相当于删除了一个重复节点。 -
如果当前节点的值不等于下一个节点的值,就将
temp
移动到下一个节点,以继续检查下一个节点。 -
最后,返回原始链表的头指针
head
,经过这个循环后,链表中的重复元素已被删除。
这个函数对于删除链表中的重复元素是一个常见的解决方法,它具有时间复杂度为 O(n) 的效率,其中 n 是链表中的节点数。