题目二:
解题思路:对于这个题,我第一反应就是先算出链表的长度,改变思路,删除链表的倒数第n个结点,转
变为删除链表的正数第m个结点,其中m是根据链表长度和n计算而来。这个题也需要处理一些特殊情况
,也就是有可能对头结点进行删除,因此我们需要设置一个虚拟头结点dummy,最后将 dummy.next 进
行返回即可。
解法一:(暴力解法)
解法二:(双指针法)
思路:以前做过这个题,所以暴力方法解决后,就开始想,然后就想到了这个方法。先设置虚拟头结点
dummy,因为需要涉及到头结点的删除,同时设置cur、pre指针为dummy,然后通过循环n--,将cur移
动到合适位置,然后循环通过判断cur.next不为空,移动两个指针,最后cur指向最后一个指针,而pre
当好指向需要删除结点的前一个指针,最后删除结点即可,返回dummy.next。可以画图加深理解。
双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast
指向链表末尾。删掉slow所指向的节点就可以了。
总结:这个题,两种思路都是自己AC出来的,虽然以前也做过,但还是很开心,总的来说,还是得画图
加深理解,代码也出来得快。