思路:使用两个指针,第一个指针遍历n次,第二个指针指向链表头结点,此时,两个指针同时向后遍历,第一个指针到达终点时第二个指针指向的就是倒数第n个结点的位置。 解释:因为倒数加其对应的正数的和就是链表的总长度加一。所以,一个指针先遍历倒数的值,再向后遍历的链表尾节点的过程就是正数值,此时另一个指针从...
我们将使用双指针的方法来解决删除链表的倒数第 N 个结点问题。 算法的步骤如下: 创建一个虚拟头结点 dummy,并将其指向链表的头结点。这样可以方便处理删除头结点的情况。 使用两个指针 fast 和 slow,初始化它们都指向虚拟头结点 dummy。 让fast 先...
删除链表的倒数第 N 个结点,C/C++递归实现,通过了。不依赖外部变量,但有一点纠结,想使用free就会报错。而VS都能无错实现。 structListNode*removeNthFromEnd(structListNode*head,intn){staticintb=0;if(head->next==NULL){b=1;returnNULL;}else{removeNthFromEnd(head->next,n);if(b==n)head->next=he...
我们之前做过一题,找出链表的倒数第N个结点,我们可以在此基础上进行,找到第N个结点,然后删除即可,但这里涉及到一些特殊情况: 1.当链表长度只有一个,且n=1时,如果直接释放头结点的话会野指针; 2.当需要删除的结点是头结点,直接删除的话会丢失后面的结点。 这里分成两种方法进行实现: 1.带一个哨兵位 我们发现...
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例2: 输入:head = [1], n = 1 输出:[] 示例3: 输入:head = [1,2], n = 1 输出:[1] 提示: ...
一、C语言实现1. 先获取链表长度,再从正向遍历 {代码...} 2. 双指针法,只需要遍历一次 {代码...} 二、JS实现1. 先获取链表长度,再从正向遍历 {代码...} 2...
将fast 指针向前移动 n+1 步,达到倒数第 n 个结点的前一个位置。 同时移动 fast 和 slow 指针,直到 fast 指针到达链表末尾。此时 slow 指针将指向倒数第 n+1 个结点。 删除操作:将 slow 指针的 next 指向 next.next,这样就跳过了倒数第 n 个结点,达到了删除的目的。 返回哑结点的 next 指针,即链表的新...
删除链表倒数第N个结点,首先肯定是要找到结点位置的,所以就看怎么快速找第N个位置。思路1:假设链表长度为L,那么倒数第N个位置就是正数的第L-N+1个位置,比较简单吧,一个班50个同学,倒数第2名,那就是正数第49名(50-2+1)。思路2:快慢指针,来两个指...