双向链表节点的添加和删除(c#语言)

weblog 2142 0 0

因为需求需要,所以直接写一个数据结构

直接上代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            MyList<int> m = new MyList<int>();
            m.add(1);
            m.add(2);
            m.add(3);
            Console.WriteLine(m.getAndRemoveLast());
            Console.WriteLine(m.getAndRemoveFirst());
            Console.WriteLine(m.getAndRemoveLast());
            
            Console.WriteLine(m.getAndRemoveLast());
            Console.WriteLine(m.getAndRemoveLast());
            m.add(3);
            Console.WriteLine(m.getAndRemoveFirst());
            m.add(4);
            m.add(5);
            m.add(6);
            m.add(7);
            m.add(8);
            Console.WriteLine(m.getAndRemoveLast());
            Console.WriteLine(m.getAndRemoveLast());
            Console.WriteLine(m.getAndRemoveFirst());
            Console.WriteLine(m.getAndRemoveFirst());
            Console.Read();
        }
    }

    //c#的集合太傻逼了,在此自制链表
    class MyList<T>
    {
        public int count;//总数
        public Node<T> first;//头节点
        public Node<T> last;//尾节点
        //添加函数
        public void add(T t)
        {
            if (first == null)
            {
                first = new Node<T>(t);
                last = first;
            }
            else
            {
                Node<T> node = new Node<T>(t);
                node.next = first;
                first.prev = node;
                first = node;
            }
            count++;
        }
        /**
         * 获取并删除最后一个元素
         * **/
        public T getAndRemoveLast()
        {
            Node<T> las = last;
            if(last!=null)
            {
                count--;
                if (first == last)
                {
                    last = null;
                    first = last;
                    return las.t;
                }
                else
                {
                    last = last.prev;
                    las.prev = null;
                    last.next = null;
                    return las.t;
                }
            }
            else
            {
                return default(T);
            }
        }


        /**
         * 获取并删除第一个元素
         * **/
        public T getAndRemoveFirst()
        {
            Node<T> fir = first;
            if (first != null)
            {
                count--;
                if (first == last)
                {
                    last = null;
                    first = last;
                    return fir.t;
                }
                else
                {
                    first = first.next;
                    fir.next = null;
                    first.prev = null;
                    return fir.t;
                }
            }
            else
            {
                return default(T);
            }
        }
    }
	//节点类
    class Node<T>
    {
        public Node<T> next;
        public Node<T> prev;
        public T t;
        public Node(T t)
        {
            this.t = t;
            next = null;
            prev = null;
        }
    }
}

 


猜你喜欢
official 843 请编写一个函数,使其可以某个中给定(非末尾)。传入函数唯一参数为要被。现有一个--head=[4,5,1,9],它可以示为:示例1:输入:head=[4,5,1,9],n
数据结构与算法 2180 简单得增改查c++描述classnode{public:intdata;node*next;node*prev;};#include"node.h"classrelink
数据结构与算法 3294 二叉树c++先看一个简单树图是分以下几种情况:1.待为叶子:此种情况下直接叶子即可2.待只有左子树,或只有右子树,那么将左子树或右子树替换该即可
数据结构与算法 2993 式栈出栈入栈操作c++描述基于//classnode{public:intdata;node*next;node*prev;};//#include"node.h
数据结构与算法 2736 简单单改查c++描述classnode{public:intdata;node*next;};#include"node.h"usingnamespacestd;classstack
数据结构与算法 1635 胜利者,求胜利者编号,以及出局者顺序。解决方案使用循环测试数据m=9,n=5输出:517436928代码(c++描述)Node.h#pragmaonceclassNode{public: i
前端(h5) 1524 h2h1----h2--------h3h1----h3----h2--------h42.案例如图:本文就介绍如何使用js设计数据结构,巧妙利用实现将顺序目录,转换成树状目录。3.js代码scr
数据结构与算法 1757 代码:数组a是未排序集合,已排序集合是逻辑上一个集合,可以看作是head,实现是一个,add方法集合数据,每次找到对应位置,使有序,toArray方法使已排序集合输出成int数
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。