「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
题目:
83. 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
示例 1:
输入: head = [1,1,2]
输出: [1,2]
复制代码
示例 2:
输入: head = [1,1,2,3,3]
输出: [1,2,3]
复制代码
提示:
- 链表中节点数目在范围
[0, 300]
内 -100 <= Node.val <= 100
- 题目数据保证链表已经按升序排列
思路:
- 因为链表已经是经过升序排列的,所以我们只需要比较当前元素和下一个元素的值的大小;
- 如果当前元素的值等于下一个元素的值,那么删除下一个元素, 在链表中的操作就直接将当前节点的下一个节点, 执行下下个节点;
- 如果值不相等,则将当前指针换后移一个元素,判断下一个元素是否重合,直到结束;
- 为了返回链表的头指针,一开始我们要找个人带跑,保留头指针所在的位置。
实现:
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteDuplicates = function(head) {
// 找人代跑,保留头指针的位置
let cur = head;
// 结束条件, 没有下一个节点就不用比较了
while (cur && cur.next) {
// 如果值相同,删除下个节点
if (cur.val === cur.next.val) {
// 这一步相当于删除下一个节点
cur.next = cur.next.next;
} else {
// 比对下一个元素和下下个元素
cur = cur.next;
}
}
return head;
};
复制代码
看懂了的小伙伴可以点个关注、咱们下道题目见。如无意外以后文章都会以这种形式,有好的建议欢迎评论区留言。