【无标题】

代码训练营day3|链表| 203.移除链表元素、707.设计链表、206.反转链表

一、 203.移除链表元素

 var removeElements = function (head, val) {
      const ret = new ListNode(0, head);
      let cur = ret;
      while (cur.next) {
        if (cur.next.val === val) {
          cur.next = cur.next.next;
          continue;
        }
        cur = cur.next;
      }
      return ret.next;
    };

二、707.设计链表

 var MyLinkedList = function () {
      this._size = 0;
      this._tail = null;
      this._head = null;
    };

    /**
     * Get the value of the index-th node in the linked list. If the index is invalid, return -1. 
     * @param {number} index
     * @return {number}
     */
    MyLinkedList.prototype.getNode = function (index) {
      if (index < 0 || index >= this._size) return null;
      // 创建虚拟头节点
      let cur = new LinkNode(0, this._head);
      // 0 -> head
      while (index-- >= 0) {
        cur = cur.next;
      }
      return cur;
    };
    MyLinkedList.prototype.get = function (index) {
      if (index < 0 || index >= this._size) return -1;
      // 获取当前节点
      return this.getNode(index).val;
    };

    /**
     * Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. 
     * @param {number} val
     * @return {void}
     */
    MyLinkedList.prototype.addAtHead = function (val) {
      const node = new LinkNode(val, this._head);
      this._head = node;
      this._size++;
      if (!this._tail) {
        this._tail = node;
      }
    };

    /**
     * Append a node of value val to the last element of the linked list. 
     * @param {number} val
     * @return {void}
     */
    MyLinkedList.prototype.addAtTail = function (val) {
      const node = new LinkNode(val, null);
      this._size++;
      if (this._tail) {
        this._tail.next = node;
        this._tail = node;
        return;
      }
      this._tail = node;
      this._head = node;
    };

    /**
     * Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted. 
     * @param {number} index 
     * @param {number} val
     * @return {void}
     */
    MyLinkedList.prototype.addAtIndex = function (index, val) {
      if (index > this._size) return;
      if (index <= 0) {
        this.addAtHead(val);
        return;
      }
      if (index === this._size) {
        this.addAtTail(val);
        return;
      }
      // 获取目标节点的上一个的节点
      const node = this.getNode(index - 1);
      node.next = new LinkNode(val, node.next);
      this._size++;
    };

    /**
     * Delete the index-th node in the linked list, if the index is valid. 
     * @param {number} index
     * @return {void}
     */
    MyLinkedList.prototype.deleteAtIndex = function (index) {
      if (index < 0 || index >= this._size) return;
      if (index === 0) {
        this._head = this._head.next;
        // 如果删除的这个节点同时是尾节点,要处理尾节点
        if (index === this._size - 1) {
          this._tail = this._head
        }
        this._size--;
        return;
      }
      // 获取目标节点的上一个的节点
      const node = this.getNode(index - 1);
      node.next = node.next.next;
      // 处理尾节点
      if (index === this._size - 1) {
        this._tail = node;
      }
      this._size--;
    };

三、206.反转链表

   //双指针法
    var reverseList = function (head) {
      if (!head || !head.next) {
        return head
      }
      let pre = null, cur = head, temp = null
      while (cur) {
        temp = cur.next
        cur.next = pre
        pre = cur
        cur = temp
      }
      return pre
    }

总结

今天的题比较困难 耗费的时间比较久 第一次正式接触链表 需要加强复习训练 ,继续加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值