19.Remove Nth Node From End of List (E)
1.Description(Easy)
Given a linked list, remove the nthnode from the end of list and return its head.
Notice
The minimum number of nodes in list is n.
Example
Given linked list:1->2->3->4->5->null
, andn=2
.
After removing the second node from the end, the linked list becomes1->2->3->5->null
.
2.Code
Version 1:
设置dummy,让slow等于dummy
fast先走N步,再让fast,slow一起走,这样fast走到最后时,slow在倒数n+1上,
直接slow.next=slow.next.next移除就好了
注意中间移动fast时如果发现fast为null就直接返回null
Version 2:
我们直接看解法代码:
这个逻辑就很简单了,要删除倒数第 n
个节点,就得获得倒数第 n + 1
个节点的引用,可以用我们实现的 findFromEnd
来操作。
不过注意我们又使用了虚拟头结点的技巧,也是为了防止出现空指针的情况,比如说链表总共有 5 个节点,题目就让你删除倒数第 5 个节点,也就是第一个节点,那按照算法逻辑,应该首先找到倒数第 6 个节点。但第一个节点前面已经没有节点了,这就会出错。
但有了我们虚拟节点 dummy
的存在,就避免了这个问题,能够对这种情况进行正确的删除。
Last updated