algorithm-camp icon indicating copy to clipboard operation
algorithm-camp copied to clipboard

203 . 移除链表元素

Open shengxinjing opened this issue 6 years ago • 4 comments

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5

https://leetcode-cn.com/problems/remove-linked-list-elements/

shengxinjing avatar Jan 22 '20 09:01 shengxinjing

var removeElements = function (head, val) {
  let newHead = new ListNode(null),
    curr = head,
    prev = newHead;

  newHead.next = head;

  while (curr) {
    if (curr.val === val) {
      prev.next = curr.next;
      curr = prev.next;
    }
    else {
      prev = curr;
      curr = curr.next;
    }
  }

  return newHead.next;
};

javin9 avatar Jan 26 '20 11:01 javin9

var removeElements = function(head, val) { // 空的head节点,规避if else let ele = { next:head } let cur = ele while(cur.next){ if(cur.next.val===val){ cur.next = cur.next.next }else{ cur = cur.next } } return ele.next };

shengxinjing avatar Jan 26 '20 13:01 shengxinjing

哨兵节点的概念有点模糊,老师可以讲一下吗

JobinChen avatar Jan 28 '20 11:01 JobinChen

null     1     2     6    3    4    5    6
prev   curr
null     1     2     6    3    4    5    6
       prev  curr
null    1      2     6    3    4    5    6
              prev  curr    
null    1      2          3    4    5    6
              prev       curr      
var removeElements = function (head, val) {
  // 创建一个初始头节点
  let node = new ListNode(null)
  let prev = node
  let curr = head
  node.next = head

  while (curr) {
    if (curr.val === val) {
      prev.next = curr.next
      // 释放删除节点内存
      curr.next = null
      curr = prev.next
    } else {
      prev = curr
      curr = curr.next
    }
  }
  return node.next
};

chennailiang avatar Jan 28 '20 11:01 chennailiang