题解 | 输出单向链表中倒数第k个结点

输出单向链表中倒数第k个结点

https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

using System;
using System.Collections.Generic;
public class Node<T> {
    public T Data {
        get;
        set;
    }
    public Node<T> Next {
        get;
        set;
    }
    public Node(T t) {
        Data = t;
        Next = null;
    }
    public Node() {

    }
}
public class SingleLinkedList<T> {
    private Node<T> head;
    public SingleLinkedList() {
        head = new Node<T> (default(T));
    }
    public void AddFirst(T Data) {
        //头插法
        var a = head.Next;//1首先把头结点后的保存
        var newNode = new Node<T>(Data); //2新建一个节点 存入新数据
        newNode.Next = a;//3将头节点之后的在插入到新节点 保证不断
        head.Next = newNode; //4插入头结点后
        /*不带头结点 需要检查边界条件 比如插入第一个
         * public void AddFirst(T data)
        {
            Node<T> toAdd = new Node<T>(data);
            toAdd.Next = head;
            head = toAdd;
        }*/

    }
    //头插法逆序,下面写尾插法
    public void AddLast(T Data) {

    }
    public   Node<T> GetIndex(int index) {
        if (head.Next == null) return null;
        Node < T > temp = temp = head.Next;

        for (int i = 2; i <= index; i++) {
            if (temp.Next != null)
                temp = temp.Next;
        }
        return temp;
    }
}
public class Program {
    public static void Main() {
        string count;
        LinkedList<int> aa = new LinkedList<int>();

//定义一个链表
        SingleLinkedList<int> linkedList = new SingleLinkedList<int>();
        while ( !string.IsNullOrEmpty((count = Console.ReadLine()))) {
            int len = int.Parse(count);
            var a = Console.ReadLine().Split();
            int[] array = Array.ConvertAll(a, int.Parse);

            for (int i = 0; i < len; i++) {
                linkedList.AddFirst(array[i]);
            }
            int k = int.Parse(Console.ReadLine());
            Console.WriteLine(linkedList.GetIndex(k).Data);
            // Console.WriteLine(count);
        }
        /*这是讨巧  直接用数组
        string count;
        while ( (count = Console.ReadLine()) != null) {
            var a = Console.ReadLine().Split();
            int[] array = Array.ConvertAll(a, int.Parse);
            int k = int.Parse(Console.ReadLine());
            Console.WriteLine(array[array.Length - k]);
        }*/
    }
}

注释是一个道友用数组完成的。本着学习的态度,从c语言之后就没有手写过链表的数据结构,想着用C#写一下 。

具体是 手写node节点的类,在写了一个单链表类 包含头插和范围指定索引出的节点。用时一小时 还没吃早饭现在去吃2025年5月18日11:12:05

全部评论

相关推荐

好在哪里了?我请问了?
仁者伍敌:活着的人都说好,帮我盖上棺材盖谢谢
点赞 评论 收藏
分享
06-23 11:28
门头沟学院 Java
牛客919661971号:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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