JS与Leetcode - 链表删除类型
2020-02-08 本文已影响0人
klmhly
一、 链表删除类型注意事项
- 首先判空, 若为空,则直接返回
- 区分删除头节点 还是 删除其余节点, 因为在代码中对于这两者的处理情况不同。
二、 处理方法
- 对头节点区分处理
- 对于头节点直接 head = head.next;
- 其他节点先用则是head.next = head.next.next
- 新建一个节点作为头节点指向原链表, 则所有删除的节点均不会是头节点
- let pHead = new ListNode(0)
- pHead.next = head
- 中间处理......
- return pHead.next
三、题型
- 给定了链表head 和 val, 删除值为val的node
- 删除排序链表的重复节点
- 没给定链表, 仅给一个node,删除这个node
四、示例
-
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
var removeNthFromEnd = function(head, n) { if(!head){ return } let slow = head let fast = head let i=0 while(i<n && fast){ fast = fast.next i++ } if(fast === null){ return head.next } while(fast && fast.next){ fast = fast.next slow = slow.next } slow.next = slow.next.next return head };
-
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
[83. 删除排序链表中的重复元素]
var deleteDuplicates = function(head) { if(!head || !head.next){ return head } let p = head while(p && p.next){ if(p.val !== p.next.val){ p = p.next } else { p.next = p.next.next } } return head };
-
删除链表中等于给定值 *val* 的所有节点。
var removeElements = function(head, val) { if(!head){ return head } while(head && head.val === val) { head = head.next } let p = head while(p && p.next){ if(p.next.val === val){ p.next = p.next.next } else { p = p.next } } return head };
-
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
var deleteNode = function(node) { node.val = node.next.val node.next = node.next.next };