移除链表元素|刷题打卡

137 阅读1分钟

一、题目描述

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

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

二、思路分析

做过几道数组题目后,让我们来尝试一下链表的题目吧~

这道题其实有一个比较简单版本的,只需要删除一个结点就可以,那样的话我们只要明白怎么删除结点就可以,但这道题有一些不同。我们不能直接的去那么做,因为不知道开头的结点状况,这样的话我们需要会一个重要的方法,虚拟结点法

AC代码

var removeElements = function(head, val) {
  let newHead = new ListNode( null ),
      prev = newHead,
      curr = head;
  prev.next = curr;
  
  while (curr) {
    if (curr.val === val) {
      prev.next = curr.next;
      curr = prev.next;
    }
    else {
      prev = curr;
      curr = curr.next;
    }
  }
  
  return newHead.next;
};

四、总结

这种创建虚拟结点的做法,大家一定要好好体会。在做链表的题的时候,很多时候我们有这样一个结点辅助,就会简单很多