题目描述
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
思路
一看这道题目,大家很快就能想到我先遍历一遍链表求出表长,假设表长为m,然后再遍历链表找到正数第m-n个,最后进行删除操作不就好了吗?诚然这是一种解法,但这道题是一道面试常考题,面试官要的肯定不是这个解法。时间复杂度我们是不可能减少了,至少得是o(n),那我们能只遍历一次链表就删除该节点吗?其实是可以的。我们只需维护一前一后两个指针,姑且称之为fast和slow,然后让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。
解法
C++版本
Java版本
Python3版本