leetcode 203.删除链表中的元素

解题思路:

删除的本质是,找到那个元素,让那个元素的前一个元素指向这个元素的后一个元素。

首先我想到的是定义一个current,表示当前元素,用来向后移动,在定义一个previous,表示当前元素的前一个元素,找到的时候改变previous和current元素的指向

var removeElements = function(head, val) {
        var current = head
        var previous = null
        while(current && current.next) {
            if(current.val == val){
                previous = current
                previous.next = current.next
                current.next = current.next.next
            }else{
                previous = current
                current = current.next
            }
        }
        return current
    };

这样对是对了,但是要求输出没有删除的元素。我这样输出的是被删除元素。还没有弄明白这个leetcode的玩法。真的懵逼。

修改代码:

var removeElements = function(head, val) {
        //1.创建头节点
        var headnode = new ListNode(0)
        //2.将头结点的next指向head
        headnode.next = head
        //3.current表示当前节点
        var current = headnode
        while(current && current.next) {
            if(current.next.val == val){
                current.next = current.next.next
            }else{
                current = current.next
            }
            console.log(headnode.next);
        }
        return headnode.next
    };

之前的解法是不知道怎么获取最后剩下的节点,所以就定义一个headnode一步一步执行获取,开始将头节点headnode的next指向head,随之遍历,这个next指向会一直向后移动,直到没有下一层,就会返回。

 

posted @ 2020-02-25 23:05  leahtao  阅读(134)  评论(0编辑  收藏  举报