Remove Nth Node From End of List

这题用到一个链表常用的找倒数第n个node的方法,就是用两个node先后出发,runner先走,走到n的时候walker出发,runner走到头的时候walker就在n的位置。 要注意处理边界。。蛮头痛的,比如长度只有1的情况和删除首位的情况。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if (0 == n) return null;

        ListNode runner = head;
        ListNode walker = head;

        int i = 0;
        //这里的条件不能写成runner.next!=null因为有可能node长度就是1
        while (runner!= null) {
            if (i < n) {
                runner = runner.next;
                i++;
            } else {
                break;
            }
        }
        //这时候runner有可能是null的,注意null pointer。这种情况对应删除首位的情况比如[1,2] 2
        if(runner==null) return head.next;

        while (runner.next!= null) {
            walker = walker.next;
            runner = runner.next;
        }
        walker.next = walker.next.next;
        return head;
    }
}
复制代码

转载于:https://juejin.im/post/5a3131586fb9a045211eb5a8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值