淘宝客建站还能赚钱吗2022网站seo
题目:
给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:
输入:head = [1,1,2] 输出:[1,2]示例 2:
输入:head = [1,1,2,3,3] 输出:[1,2,3]
思路:
初始化两个指针:
slow
指向当前不重复链表的末尾(初始为head
)。
fast
用于遍历链表(初始为head->next
)。遍历链表:
如果
fast->val != slow->val
,说明fast
是一个新值,应该保留:
更新
slow->next = fast
(连接不重复的节点)。移动
slow = slow->next
(更新不重复链表的末尾)。不管是否相等,
fast
都继续向后移动。
代码:
struct ListNode* deleteDuplicates(struct ListNode* head)
{if (head == NULL){return NULL;}struct ListNode* slow = head;struct ListNode* fast = head->next;while (fast != NULL){if (fast->val != slow->val){slow->next = fast; // 连接不重复的节点slow = slow->next; // 移动 slow}fast = fast->next; // 继续遍历}slow->next = NULL; // 截断尾部存在的重复节点return head;
}