题目

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5

大致意思

给你一个链表,和一个val,把这个链表中与给定val相同的节点干掉

解决方案

  • 首先,需要遍历整个链表
  • 在每次遍历时,需要记录上一个节点是什么,在找到需要干掉的节点时候,进行上下的拼接
    • 当出现链表的第一个就是需要被干掉的时候,直接进行head = head.next的操作
    • node.val === val的时候,pre.next = node.next,这个时候不要去改变pre,因为下一个节点可能也是需要被干掉的节点
    • 如果不需要干掉,pre = node,然后node继续遍历 node = node.next

源代码

var removeElements = function(head, val) {
  if (!head) return head;

  var node = head;
  var pre;

  while (node) {
    if (node.val === val) {
      if (!pre) {
        head = head.next;
      } else {
        pre.next = node.next;
      }
    } else {
      pre = node;
    }
    node = node.next;
  }

  return head;
};