解题思路:
删除的本质是,找到那个元素,让那个元素的前一个元素指向这个元素的后一个元素。
首先我想到的是定义一个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指向会一直向后移动,直到没有下一层,就会返回。