首页 > 编程语言 >c#-单链表

c#-单链表

时间:2023-04-30 12:00:59浏览次数:49  
标签:index 单链 cur val c# next int public

namespace MyLink;
public class MyLinkedList {
    private int _size{get;set;}
    public class MyTreeNode{
        public int val{get;set;}
        public MyTreeNode next{get;set;}

        public MyTreeNode(int val)
        {
            this.val = val;
        }
    }
    public MyTreeNode head{get;set;}
    public MyLinkedList() {
        head = new MyTreeNode(0); //虚拟头结点
        this._size = 0;
    }
    
    public int Get(int index) {
        if(index < 0 || index >= this._size) return -1;
        var cur = head.next;
        while(index != 0) // 举个案例来测试边界 如 index=0,这个循环就不会执行
        {
            cur = cur.next;
            index--;
        }
        return cur.val;
    }
    
    public void AddAtHead(int val) {
        var newHead = new MyTreeNode(val);
        newHead.next = head.next;
        head.next = newHead;
        this._size ++;
    }
    
    public void AddAtTail(int val) {
        var cur = head; // 指向虚拟节点 *
        while(cur.next != null)
        {
            cur = cur.next;
        } 
        cur.next = new MyTreeNode(val);
        this._size++;
    }
    
    public void AddAtIndex(int index, int val) {
        var newNode = new MyTreeNode(val);
        var cur = head;
        while(index != 0)
        {
            cur = cur.next;
            if(cur == null) break;
            index --;
        }
        if(cur != null)
        {
            newNode.next = cur.next;
            cur.next = newNode;
            this._size++;
        }            
    }
    
    public void DeleteAtIndex(int index) {
        if(index < this._size){
            var cur = head;
            while(index != 0)
            {
                cur = cur.next;
                if(cur == null) return;
                index--;
            }
            if (cur != null)
            {
                cur.next = cur.next.next;
                this._size--;
            }
        }
    }
}

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList obj = new MyLinkedList();
 * int param_1 = obj.Get(index);
 * obj.AddAtHead(val);
 * obj.AddAtTail(val);
 * obj.AddAtIndex(index,val);
 * obj.DeleteAtIndex(index);
 */

力扣707

标签:index,单链,cur,val,c#,next,int,public
From: https://www.cnblogs.com/Insist-Y/p/17365098.html

相关文章

  • ABC300 Editorial
    哭了,还是写不了Ex的题解,因为不会A-N-choicequestion题意给定\(a,b\)和序列\(\{c_n\}\),求\(a+b\)在\(c\)中的下标。分析直接记录一下\(pos_{c_i}=i\)就薄纱了。codeconstintmaxn(2e5+500);intn,a,p[maxn];intmain(){ n=read(),a=read()+r......
  • [ERR] collect2: fatal error: cannot find 'ld'
    今天在orinnano上希望g++使用lld代替ld时候,在如下命令时候抛出了如标题的错误>>g++-fuse-ld=llda.cccollect2:fatalerror:cannotfind'ld'compilationterminated.因为最开始配置llvm-15环境时候我有将lld-15软连接为lld,所以使用lld是可以正确执行的,但是看起来g++并......
  • C++之forward
    不管是T&&、左值引用、右值引用,std::forward都会按照原来的类型完美转发。forward主要解决引用函数参数为右值时,传进来之后有了变量名就变成了左值。 #include<QCoreApplication>#include<memory>#include<iostream>usingnamespacestd; template<typenameT>void......
  • 在CentOS 7上安装RabbitMQ服务器
    导读RabbitMQ是一个免费的开源企业消息代理软件。它是用Erlang编写的,并实现了高级消息队列协议(AMQP)。它提供所有主要编程语言的客户端库。它支持多种消息传递协议,消息队列,传送确认,灵活的路由到队列,多种交换类型。它还提供易于使用的HTTP-API,命令行工具和用于管理RabbitMQ......
  • Django框架——Q查询进阶、ORM查询优化、事务操作、字段类型、字段参数、Ajax、Conten
    Q查询进阶fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('pk',1))#2.添加查询条件q_obj.children.append(('price__gt',2000))#支持添加多个res=models.Book.o......
  • Hibernate ehcache配置二级缓…
    Cache简介:  )是计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝,应用程序在运行时直接读写缓存中的数据,只在某些特......
  • 【内核】深入分析内核panic(一)--内核问题的原因
    1概述linux内核包括进程管理、内存管理、中断管理、设备驱动、同步机制等各种模块,它们共同运行在一个共享的地址空间中,因此在运行中一旦出现问题,彼此之间可能具有千丝万缕的联系。而且与用户态不同,内核还需要与形形色色的硬件打交道,因此对于某些较为诡异的问题,除了软件以外还......
  • 【内核】深入分析内核panic(三)--内核错误处理流程
    1内核错误处理方式当内核出现致命错误时,只要cpu还能正常运行,那么最重要的就是向用户输出详细的错误信息,以及保存问题出现时的错误现场。以上致命错误可包含以下两种类型:(1)硬件能检测到的错误,如非法内存访问,非法指令等,此时cpu会触发异常,并进入异常处理流程。在异常处理流程中会......
  • 查看docker容器日志
    要查看Docker容器的日志,可以使用以下命令:dockerlogs[OPTIONS]CONTAINER其中,OPTIONS可以是以下选项之一:-f:跟踪日志输出,类似于tail-f命令。--since:仅显示指定时间之后的日志,格式为YYYY-MM-DDTHH:MM:SS。--until:仅显示指定时间之前的日志,格式为YYYY-MM-DDTHH:MM:SS。--ta......
  • Linux用ntpdate自动同步时间后使用crontab定时任务更新
     两种同步linux系统的时间方法:(1)开启ntpd服务,即配置ntp服务器实现时间同步。(2)利用ntp客户端程序,即ntpdate同步时间。注意:因为ntp服务器本来就会与上层时间服务器进行同步,所以在默认的情况下,ntp服务器不可以使用ntpdate,也就是说ntpdate和ntpd不能同时启用。上一篇已经介绍......