Leetcode -- Remove Nth Node From End of List

来源:互联网 发布:88端口怎么起 编辑:程序博客网 时间:2024/05/20 11:31

问题链接:https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/


问题描述:

Given a linked list, remove the nth node from the end of list and return its head.
For example,

   Given linked list: 1->2->3->4->5, and n = 2.

   After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.


API:public ListNode removeNthFromEnd(ListNode head, int n)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }


问题分析:本题实际上就是Find Nth node from end of list的翻版。只是因为需要remove又只能扫一遍,所以会多出一些边界问题

首先介绍一下Find nth node from end of list的做法。

本质上这题就是双指针问题,以后在linkedlist的问题里也会遇到一些双指针的问题。

第一步是定义一个快指针找到第n + 1个指针,譬如说在上述例子里,先找到3。

然后再定义一个慢指针指向头指针,然后快慢同时往下扫,当快指针走到了尽头空指针的时候,慢指针就会指向nth node from end of list.

理论就是这样的,慢指针和快指针之间的差是n。所以当快指针走到尽头end的时候,慢指针自然就是nth node from end of list.

但事实上本题是要remove,而且只能扫一遍,所以本质上是要找n + 1th node from end of list.但之前我们提到了边界问题,这个边界问题就是当要删除头指针的时候,你是没有头指针之前的那个指针的。所以在快指针扫的时候,我们就要做一个特殊判断,也就是当快指针在第一次走的时候已经指向null了,我们就可以直接删除头指针了。也就是直接返回头指针下面那个指针。


给出代码如下:

    public ListNode removeNthFromEnd(ListNode head, int n) {        ListNode tmp = head;        while(n >= 0){            if(tmp == null)                return head.next;            n--;            tmp = tmp.next;        }        ListNode prev = head;        while(tmp != null){            prev = prev.next;            tmp = tmp.next;        }        prev.next = prev.next.next;        return head;    }


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕了下面有异味怎么办 孕妇尿白细胞1是怎么办 药流期间喂奶了怎么办 20多岁卵巢早衰怎么办 3岁儿童肚子胀气怎么办 肚子又胀又痛怎么办 1岁宝宝肚子胀气怎么办 2岁宝宝肚子胀气怎么办 产后腰粗肚子大怎么办 发烧后腹泻拉水怎么办 又吐又拉还发烧怎么办 喝中药恶心想吐怎么办 生完孩子肛门疼怎么办 拉完大便肛门痛怎么办 肚子总是凉凉的怎么办 京东金条风控了怎么办 京东维修没发票怎么办 假牙吞到肚子里怎么办 眼睛一只大一只小怎么办 一个眼睛大一个眼睛小怎么办 电脑上的字模糊怎么办 无忧乐行注销了怎么办 连供墨盒有空气怎么办 30岁突然停经了怎么办 下面很痒怎么办白带多 私处有点痒怎么办洗液 人的下体皮肤痒怎么办 打球手指关节肿了怎么办 婴儿2个月鼻塞怎么办 3个月婴儿鼻塞怎么办 2个月婴儿感冒了怎么办 头发剪短了很丑怎么办 头发剪了后悔了怎么办 额头的碎头发翘怎么办 带耳机时间长耳朵疼怎么办 种的睫毛容易掉怎么办 走路多了脚背疼怎么办 扭伤脚筋怎么办恢复快 脚背上的筋断了怎么办 腿上的筋疼怎么办 脚筋拉伤怎么办恢复快