M97 网站建设网络公司整站源码,天津网站建设营销,东莞seo黑帽培训,企业网站icp备案删除排序链表中的重复元素
https://leetcode.cn/problems/remove-duplicates-from-sorted-list/
描述
给定一个已排序的链表的头 head #xff0c; 删除所有重复的元素#xff0c;使每个元素只出现一次 。返回 已排序的链表
示例 1
输入#xff1a;head [1,1,2]
输出 删除所有重复的元素使每个元素只出现一次 。返回 已排序的链表
示例 1
输入head [1,1,2]
输出[1,2]示例 2
输入head [1,1,2,3,3]
输出[1,2,3]提示
链表中节点数目在范围 [0, 300] 内-100 Node.val 100题目数据保证链表已经按升序排列
算法实现
1 方案 1
/*** Definition for singly-linked list.* class ListNode {* val: number* next: ListNode | null* constructor(val?: number, next?: ListNode | null) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }* }*/function deleteDuplicates(head: ListNode | null): ListNode | null {let p head;while(p?.next) {// 检测相邻两位是否相等const isEqual p.val p.next.val // 相等则移动两位否则正常移动一位isEqual ? (p.next p.next.next) : (p p.next)}// 原路返回headreturn head;
};解题思路 链表是有序的重复链表一定相邻遍历链表如果发现当前元素和下个元素值相同就删除下个元素值删除的方式就是当前元素直接链接下下个元素 解题步骤 遍历链表如果发现当前元素和下个元素值相同就删除下个元素值遍历结束后返回原链表头即可
2 方案 2
/*** Definition for singly-linked list.* class ListNode {* val: number* next: ListNode | null* constructor(val?: number, next?: ListNode | null) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }* }*/function deleteDuplicates(head: ListNode | null): ListNode | null {let cur headlet next curwhile(cur) {do {next next.next} while(next cur.val next.val)cur.next nextcur cur.next}return head
};上述是官方示例程序这里while里面嵌套do while这种写法让人眼前一亮