问题描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例
输入: 1->1->2
输出: 1->2
解法
该问题可以使用双指针来解决。具体步骤如下:
- 首先,初始化两个指针
curr
和next
,分别指向链表头部。 - 然后,遍历链表。如果当前节点的值等于下一个节点的值,则将当前节点的下一个节点指向下下个节点,这样就相当于删除了当前节点的重复节点。
- 最后,当遍历完成后,返回链表的头部即可。
代码实现
以下是使用 Typescript 实现的代码:
function deleteDuplicates(head: ListNode | null): ListNode | null {
let curr = head;
while (curr !== null && curr.next !== null) {
const next = curr.next;
if (curr.val === next.val) {
curr.next = next.next;
} else {
curr = next;
}
}
return head;
}
时间复杂度分析
由于需要遍历整个链表,因此时间复杂度为 ,其中 是链表的长度。在遍历过程中,我们只需要维护两个指针,因此空间复杂度为 。
因此,算法的时间复杂度为 ,空间复杂度为 。