1. 题目描述

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

示例 1:
203. 移除链表元素 - 图1

  1. 输入:head = [1,2,6,3,4,5,6], val = 6
  2. 输出:[1,2,3,4,5]

示例 2:

  1. 输入:head = [], val = 1
  2. 输出:[]

示例 3:

  1. 输入:head = [7,7,7,7], val = 7
  2. 输出:[]

提示:

  • 列表中的节点在范围 [0, 10]
  • 1 <= Node.val <= 50
  • 0 <= k <= 50

    2. 解题思路

    对于这道题目,本身是很简单的,就是遍历链表,删除指定的值,但是需要注意,如果是需要删除的值在链表中时,直接删除即可,如果要删除的节点在链表的头部,这就要处理遍历情况,为了避免这种情况,我们可以初始化一个哑结点dummyHead,它是一个空节点,将他放在头结点的前面。这样就不会出现为空的情况。

复杂度分析:

  • 时间复杂度:O(n)。其中n为链表的长度,我们需要遍历整个链表。
  • 空间复杂度:O(1)。需要额外的常数大小的辅助空间。

    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. * @param {number} val
    11. * @return {ListNode}
    12. */
    13. var removeElements = function(head, val) {
    14. let dummyHead = new ListNode(0)
    15. dummyHead.next = head
    16. let pre = dummyHead, cur = head
    17. while(cur){
    18. cur.val == val ? pre.next = cur.next : pre = cur
    19. cur = cur.next
    20. }
    21. return dummyHead.next
    22. };

    4. 提交结果

    image.png