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 @ 2022-04-08 13:17  BJFU-VTH  阅读(27)  评论(0编辑  收藏  举报