题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
for(int i = 1; i < n + 1; i++) { tail = tail.next; }
if(tail == null) { return head.next; }
因为删除倒数第 n 个节点必须找到倒数第 n - 1 个节点,所以对于该题,删除第一个节点是一个特殊情况,因为第一个节点没有前驱节点。 注意解答代码中的上面这段代码,可以将删除第一个元素的特殊情况直接解决掉。假如要删除的是第一个节点,那么 tail 指针会直接走到链表的表尾的 null,在该题中也只有在删除第一个节点时候 tail 会跑到最后的 null,所以可以据此判断删除的是否是第一个节点,从而针对性处理。因为给的参数 n 代表的是要删除的倒数第 n 个节点,如果直接推断是否删除的是头一个节点需要遍历出链表长度,这样代码会平均下来多遍历一次链表,运行时间会拉长很多。