83. 删除排序链表中的重复元素

思路:

意思就是把排序链表每个元素只留下一个,还要维持先后顺序。

这种题,可以用set来存储遍历过的元素来降低代码编写难度,但时空复杂度都是O(n)的。(代码一)

其实还可以用一个变量记住最后一个值是啥,来降低空间复杂度。空间O(1),时间O(n)。(代码二)

 

代码一:

复制代码
 1 var deleteDuplicates = function(head) {
 2         let virtualHead = new ListNode(0, head), pre = virtualHead, cur = head;
 3         let memSet = new Set();
 4         while(cur){
 5             if(memSet.has(cur.val)){
 6                 pre.next = cur.next;
 7                 cur = cur.next;
 8             }else{
 9                 memSet.add(cur.val);
10                 pre = pre.next;
11                 cur = cur.next;
12             }
13         }
14         return virtualHead.next;
15     };
复制代码

代码二:

复制代码
 1 /**
 2      * @param {ListNode} head
 3      * @return {ListNode}
 4      */
 5     var deleteDuplicates = function(head) {
 6         let virtualHead = new ListNode(0, head), pre = virtualHead, cur = head;
 7         // 注意题中给出的数据范围
 8         let mem = -101;
 9         while(cur){
10             if(cur.val === mem){
11                 pre.next = cur.next;
12                 cur = cur.next;
13             }else{
14                 mem = cur.val;
15                 pre = pre.next;
16                 cur = cur.next;
17             }
18         }
19         return virtualHead.next;
20     };
复制代码

 

posted @   BJFU-VTH  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示