给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

    示例 1:

    输入:head = [1,2,3,3,4,4,5]
    输出:[1,2,5]
    示例 2:

    输入:head = [1,1,1,2,3]
    输出:[2,3]

    1. /**
    2. * Definition for singly-linked list.
    3. * function ListNode(val, next) {
    4. * this.val = (val===undefined ? 0 : val)
    5. * this.next = (next===undefined ? null : next)
    6. * }
    7. */
    8. /**
    9. * @param {ListNode} head
    10. * @return {ListNode}
    11. */
    12. var deleteDuplicates = function (head) {
    13. // 下一个和下一个的下一个比, 如果相同, 记录该值
    14. // 只要下一个值和这值一样就把当前的下一个指针
    15. let node = new ListNode(-1)
    16. node.next = head
    17. let p = node;
    18. while (p.next && p.next.next) {
    19. if (p.next.val === p.next.next.val) {
    20. let val = p.next.val;
    21. while (p.next && p.next.val === val) {
    22. p.next = p.next.next
    23. }
    24. } else {
    25. // 不重复,跳过
    26. p = p.next
    27. }
    28. }
    29. return node.next
    30. };

    image.png