本文共 880 字,大约阅读时间需要 2 分钟。
思路:
第一重循环从链表的头节点开始,枚举一个保留的节点,这是因为我们保留的是「最开始出现的节点」。
第二重循环是枚举「最开始出现的节点」的下一个结点,到链表的末尾结束,将所有与保留节点相同的节点全部移除。//移除未排序链表中的重复节点。保留最开始出现的节点。(两层循环)//输入:[1, 2, 3, 3, 2, 1]//输出:[1, 2, 3]var removeDuplicateNodes = function (head) { var slow = head; while (slow) { var fast = slow; while (fast.next) { if (slow.val === fast.next.val) { fast.next = fast.next.next; } else { fast = fast.next; } } slow = slow.next; } return head;};
//排序链表去重 O(n)var deleteDuplicates = function(head) { let current = head //把首节点指针赋值给current while(current && current.next) { //当前节点以及下一节点不为空时 if(current.val === current.next.val) { //值相等 current.next = current.next.next }else { current = current.next //值不相等 } } return head //返回首节点};
转载地址:http://dnuvi.baihongyu.com/