题意
删掉链表元素,按尾巴节点倒数第几来删,给定一个倒序的顺序n,删除倒数n的数字。
我的思路
这种题,一般思路都是遍历一遍链表,然后找到那个倒数位。删除它。 时间复杂度为O(2L-n),L为链表的长度。
如下图所示
新建一个节点,两个指针指向它,它的next就是head,让其中一个指针先行n+1步,这样两个指针之间会相差n个元素,然后两个指针一起遍历,直到先行的指针到了null,这个时候前一个指针就在倒数第n的位置的前一个位置。删掉它即可。
代码
1 | /** |
注意一个地方:有人可能这么写
1 | ListNode slow = new ListNode(0); |
这么写会遇到一个坑,比如删掉的就是head节点时就会出错。