题解 | #删除链表的倒数第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;
    }
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务