LeetCode 19:删除链表的倒数第 N 个结点

导读:本篇文章讲解 LeetCode 19:删除链表的倒数第 N 个结点,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

链接

题目:
在这里插入图片描述

方法一:快慢指针

如果要删除倒数第n个节点,让fast移动n步,目的是拉开fast和slow之间的距离;
然后让fast和slow同时移动,直到fast指向链表末尾,此时slow就是要删除的节点!
最后fast为末尾节点的next即为null,slow就是要删除的节点node,而pre节点记录了node的前节点!


class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(n<=0){
            return head;
        }
        // 哨兵节点!
        ListNode mer=new ListNode(-1);
        mer.next=head;
        
        ListNode fast=mer;
        ListNode slow=mer;
        //fast移动n次
        for(int i=0;i<n;i++){
            fast=fast.next;
        }
        ListNode pre=null;
        while(fast!=null){
            pre=slow;
            // slow和fast一起移动,直到fast到末尾
            slow=slow.next;
            fast=fast.next;
        }
        // 删除
        pre.next=slow.next;
        return mer.next;

    }
}

方法二:模拟

直接按情况分类计算;
排除k>size和k=size=1的特殊情况;
如果k=1且size>1,即删除最后一个节点;
如果k>1且k=size,即删除第一个,那么直接返回第二个节点即可;
而k>1且k<size时,将前驱节点指向要删除节点的next即完成删除;


class Solution {
    public ListNode removeNthFromEnd(ListNode head, int k) {
        Stack<ListNode> s=new Stack<>();
        ListNode curr=head;
        while(curr!=null){
            s.push(curr);
            curr=curr.next;
        }
        // base case
        if(k>s.size() || k<=0){
            return head;
        }
        if(k==1 && s.size()==1){
            return null;
        }

		else if(k==1 && s.size()>1 ){
            s.pop();
            ListNode pre=s.pop();
            pre.next=null;

        }else if(k>1 && k==s.size()){
            ListNode second=null;
            for(int i=0;i<k-1;i++){
                second=s.pop();
            }
            return second;
        }else if(k>1 && k<s.size()){
            ListNode front=null;
            for(int i=0;i<k+1;i++){
                front=s.pop(); // 前
            }
            front.next=front.next.next;
        }

        return head;


    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89211.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!