leetcode19 删除链表倒数节点,双指针,中间差为n

1.双指针,指针A先移动n次, 指针B再开始移动。当A到达null的时候, 指针b的位置正好是倒数n

我们可以设想假设设定了双指针p和q的话,当q指向末尾的NULL,p与q之间相隔的元素个数为n时,那么删除掉p的下一个指针就完成了要求。

设置虚拟节点dummyHead指向head

设定双指针p和q,初始都指向虚拟节点dummyHead

移动q,直到p与q之间相隔的元素个数为n

同时移动p与q,直到q指向的为NULL

将p的下一个节点指向下下个节点
2.javacode

    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null) return null;
        //细节,需要定义一个指向开头的指针
    ListNode resulthead = new ListNode(0);
    resulthead.next = head ;
    //这里有个细节,不能将first和second定义为头结点,否则会出现很多问题
    ListNode first = resulthead;
    ListNode second = resulthead;
    for( int i=0; i<n; i++)
    {
        first = first.next;
    }
    while (first.next!=null)
    {
        first = first.next;
        second = second.next;
    }
    second.next = second.next.next ;
    return  resulthead.next;
    }

3.注意细节,思路很简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值