ListNode cur = dummy; //获取被删除节点的上一个节点【因为是删除倒数的节点,又因为是链表,所以我们必须从正面来】 for (int i = 1; i < length - n + 1; ++i) { cur = cur.next; } cur.next = cur.next.next; //删除节点 ListNode ans = dummy.next; //返回删除后的头结点链表 return ans...
public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pre = head; int nums = length(head) - n; //用链表的长度减去n得到要删除的节点的位置 if (nums==0){ return head.next; } for (int i = 1; i < nums; i++) { //通过循环 节点.next 得到要删除的节点的前一个 pre =...
在走了n步之后,2号指针开始遍历,当1号指针走到尾的时候,2号指针就是距离尾部第n位的元素。
进阶:你能尝试使用一趟扫描实现吗? 福大大 答案2021-09-17: 双指针。 1.创建虚拟头节点preHead,其next节点指向head。 2.右节点先走,遍历n+1个节点。 3.继续遍历,左右节点都指向next。 4.遍历完成后,左节点的next指向左节点的next的next。 5.返回preHead的next节点。 时间复杂度:O(N)。 空间复杂度:O(1)...
解法2:快慢指针 思路:fast 比 slow 提前 n 个节点,然后 slow 和 fast 一同遍历,当fast.next为空...
在走了n步之后,2号指针开始遍历,当1号指针走到尾的时候,2号指针就是距离尾部第n位的元素。