审题:
需要我们找到倒数第n个节点,并把他从链表中删除,然后把新的链表的头结点返回
思路:
该题的唯一难点就是如何找到单链表的倒数第n个节点方法一:直接法
我们可以遍历一次单链表,然后把链表的总长度求出来,用总长度减去n可以得到要删除的节点的索引,然后从头再遍历一次就可以找到该节点。
不过为了将该节点从链表中删除,我们需要找到的其实是他的前一个节点,然后把前一个节点和他的后一个节点连起来。
方法二:栈
因为栈具有“后进先出”的性质,所以我们把链表的每个节点的地址存入栈后,弹出n次数据,弹完n次之后,栈顶的就是倒数第n个数据的前一个数据。
方法三:双指针
cur指针比prv指针提前n+1个位置,俩个指针一起移动,直到cur指向nullptr。此时prv指向的节点就是倒数第n个节点的前一个节点。
解题:
方法一:
(1)getlen
(2)核心代码
方法二:
注意:因为利用了栈这个结构,所以要注意控制条件,使用pop函数,或者top函数之前需要确保仍有数据在栈中
方法三:
19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)