【算法04天:Day4】第二章链表 LeetCode 删除链表的倒数第N个结点(19)

43 阅读1分钟

题目二:

image.png

解题思路:对于这个题,我第一反应就是先算出链表的长度,改变思路,删除链表的倒数第n个结点,转

变为删除链表的正数第m个结点,其中m是根据链表长度和n计算而来。这个题也需要处理一些特殊情况

,也就是有可能对头结点进行删除,因此我们需要设置一个虚拟头结点dummy,最后将 dummy.next 进

行返回即可。

解法一:(暴力解法)

image.png

解法二:(双指针法)

思路:以前做过这个题,所以暴力方法解决后,就开始想,然后就想到了这个方法。先设置虚拟头结点

dummy,因为需要涉及到头结点的删除,同时设置cur、pre指针为dummy,然后通过循环n--,将cur移

动到合适位置,然后循环通过判断cur.next不为空,移动两个指针,最后cur指向最后一个指针,而pre

当好指向需要删除结点的前一个指针,最后删除结点即可,返回dummy.next。可以画图加深理解。

image.png

双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast

指向链表末尾。删掉slow所指向的节点就可以了。

总结:这个题,两种思路都是自己AC出来的,虽然以前也做过,但还是很开心,总的来说,还是得画图

加深理解,代码也出来得快。