剑指 Offer 18. 删除链表的节点

Posted on 2022-03-13 23:45  AcTourist  阅读(22)  评论(0)    收藏  举报

一、题目要求

 

二、题目分析

  1.在单向链表中,节点中没有指向一个节点地指针,所以只好从链表地头节点开始顺序查找

  2.那是不是一定需要得到被删除地节点地前一个节点呢?答案是不需要地,我们可以很方便地得到要删除地节点地下一个节点。如果我们把下一个节点地内容覆盖掉,再把下一个节点删除,那是不是就相当于把当前需要删除地节点说出来

三、代码分析

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} val
 * @return {ListNode}
 */
var deleteNode = function(head, val) {
    //如何去删除?我们可以把节点 h 的节点就是val,我们可以把h指向下一个节点i,这样我们就可以安全地删除节点i并保证链表没有断开。
    let tmp = head;//替换节点
    let node = tmp.next;//正常遍历
    
    if(tmp.val === val){
        return head.next;
    }

    while(node){
        if(node.val === val){
            tmp.next = node.next;
        }
        tmp = node;
        node = node.next;
    }
    return head;
};