解题思路
-
由于题目中已经说了, 保证链表中节点的值互不相同, 所以意味着我们只需要删除一个元素,这一步懂了可以比人家快一大步;
-
首先要考虑删除的节点是不是头节点,因为头节点的删除跟其他的不一样,正常我们链表中删除某个节点是拿到它的前一个节点
prev,改变prev.next的指向,头节点拿不到prev,需要单独判断,也可以给链表前面直接再插入一个节点,这里我选择直接判断; -
如果不是头节点,那么我们每次遍历到一个节点的时候,判断它的下一个节点是不是我们要删除的值,如果是的话删完直接退出循环。
/**
* 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) {
// 判断是不是头节点
if (head.val === val) {
return head.next;
}
let cur = head;
// 如果不是头节点就简单了,每次判断当前节点的后继节点直接进行删除
// 正常来说我们只需要判断cur.next即可,但是如果删除的是末尾节点,删除完后cur 就为null了,所以需要兼容一下
while (cur && cur.next) {
if (cur.next.val === val) {
cur.next = cur.next.next;
break;
}
cur = cur.next;
}
return head;
};