题解 | #删除链表的倒数第n个节点#

删除链表的倒数第n个节点

https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

using System;
using System.Collections.Generic;

/*
public class ListNode
{
    public int val;
    public ListNode next;

    public ListNode (int x)
    {
        val = x;
    }
}
*/

class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head ListNode类
     * @param n int整型
     * @return ListNode类
     */
    public ListNode removeNthFromEnd (ListNode head, int n) {
        // write code here

        //解题思路:使用头插法(逆序插入),将元素依次入栈,利用头插法建立新链表

        //栈,存储所有结点
        var stack = new Stack<ListNode>();
        //头指针
        var node = new ListNode(-1);
        //顺序
        int idx = 1;

        //元素依次入栈
        while (head != null) {
            stack.Push(head);
            head = head.next;
        }

        //不符合逻辑,返回空
        if (stack.Count - n + 1 < 0) return null;

        //将栈中元素依次出栈
        while (stack.Count > 0) {
            //如果当前操作序号不是目标序号n
            if (idx != n ) {
                //建立一个新结点
                var tmp =  stack.Pop();
                //新结点的引用域指向头指针的引用域
                tmp.next = node.next;
                //头指针的引用域指向新结点
                node.next = tmp;
            }
            //是目标序号,则直接弹出该结点 
            else {
                stack.Pop();
            }
            idx++;
        }
        return node.next;
    }
}

全部评论

相关推荐

07-03 16:02
门头沟学院 Java
今天面试,非常紧张,面试官问我springboot有哪些核心模块都答不上来了,真的对自己无语了!
程序员小白条:28届我勒个去,很多人面试都没机会
查看1道真题和解析
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
05-14 09:24
青岛工学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务