给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表

    image.png

    1. // 83. 删除排序链表中的重复元素
    2. // 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
    3. /**
    4. * Definition for singly-linked list.
    5. * function ListNode(val, next) {
    6. * this.val = (val===undefined ? 0 : val)
    7. * this.next = (next===undefined ? null : next)
    8. * }
    9. */
    10. /**
    11. * @param {ListNode} head
    12. * @return {ListNode}
    13. */
    14. // 题解
    15. // 1.题目中已排序,告诉我们所以重复链表都相同
    16. // 2.删除相同,这道题比较简单
    17. var deleteDuplicates = function(head) {
    18. let p = head;
    19. // 循环,因为要与下一个值作比较,所以也要进行判断
    20. while(p && p.next) {
    21. if(p.val === p.next.val) {
    22. // 删除下一个
    23. p.next = p.next.next
    24. } else {
    25. // 这边要注意的是继续下一步时要考虑的可能后面也相同,所以我们让循环多执行一次
    26. p = p.next
    27. }
    28. }
    29. // 直接返回原链表即可
    30. return head
    31. };
    32. // 时间复杂度 o(n) 空间复杂度 o(1)