删除排序链表中的重复元素(LeetCode83)
给定一个已排序的链表的头节点 head
,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。
问题描述
给定一个已排序的链表,需要删除链表中所有重复的元素,使每个元素只出现一次。
解决方法
我们可以使用双指针法来解决这个问题。定义两个指针 left
和 right
,初始时都指向链表的头节点 head
。然后,我们开始遍历链表,比较 left
和 right
指针指向的节点的值:
- 如果
left
和right
指向的节点的值相同,则移动right
指针,直到找到一个与当前节点值不同的节点。 - 如果
left
和right
指向的节点的值不同,则将left
指针指向right
指向的节点,并继续遍历。
实现
以下是用 JavaScript 实现的代码:
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val);
* this.next = (next===undefined ? null : next);
* }
*/
const deleteDuplicates = function (head) {
let left = head;
let right = head;
while (right) {
if (left.val === right.val) {
right = right.next;
} else {
left.next = right;
left = right;
}
}
left.next = right;
};
在上面的代码中,我们定义了一个 deleteDuplicates 函数,接受链表的头节点作为参数,并使用双指针法删除重复元素。
总结
本文介绍了如何使用双指针法删除排序链表中的重复元素,并给出了相应的 JavaScript 实现。双指针法是一种常用的解决链表问题的方法,通过定义两个指针来遍历链表并处理元素,可以有效地解决多种链表问题。
评论区