
本篇博客会讲解力扣“83. 删除排序链表中的重复元素”的解题思路,这是题目链接。

 由于链表是排好序的,我们可以通过遍历一次链表的方式,删除所有重复的结点。具体来说,
- 如果链表为空,则不需要删除,直接返回空链表。
- 如果链表非空,则使用指针变量cur,从链表的头结点head开始,向后遍历。每次遍历时,检查cur->next的值和cur的值是否相同,若相同,则需要删除cur->next;若不相同,则说明链表中不存在值和cur相同的结点了,让cur指向cur->next即可。重复以上步骤,直到cur->next为空,即cur指向了链表的尾结点,此时不存在值和cur相同的结点,因为cur后面已经没有结点了,结束遍历。
struct ListNode* deleteDuplicates(struct ListNode* head) {
	if (head == NULL)
	{
		return head;
	}
	struct ListNode* cur = head;
	while (cur->next)
	{
		if (cur->next->val == cur->val)
		{
			// 删除cur->next
			struct ListNode* del = cur->next;
			cur->next = del->next;
			free(del);
		}
		else
		{
			// 此时不存在和cur的值相同的结点
			cur = cur->next;
		}
	}
	return head;
}

总结
本题的关键在于想清楚删除的过程。若cur->next的值和cur相同,说明cur->next是要删除的,否则说明链表中不存在值和cur相同的结点了。
感谢大家的阅读!





![[JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测](https://img-blog.csdnimg.cn/f6af768ffacd4764b475e8140d6bb74b.png)













