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

示例 1:

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

题解

添加一个哨兵节点,即在最开始的节点外独立添加一个node节点,指向头结点,然后使用前后指针不断往后查找,找到相同的就删除即可,最后返回哨兵节点的next节点

  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. const sentinel = new ListNode(0, head);
  15. let prev = sentinel;
  16. let curr = head;
  17. while (curr) {
  18. if (curr.val == val) {
  19. prev.next = curr.next
  20. } else {
  21. prev = curr
  22. }
  23. curr = curr.next
  24. }
  25. return sentinel.next
  26. };