链表

1. 链表

     单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元既可以是连续的,也可以是不连续的。是结点为单位构成链表,其包括数据区,和地址区;

     数据区:存放当前结点的数据;

     地址区:存放下一个节点的地址;

 

用C#描述单结点:

 public class ListNode<T>
    {
        public T Data { set; get; }   //数据区
        public ListNode<T> Next { set; get; } //存放下一个节点的地址区
        public ListNode(T item)
        {
            this.Data = item;
            this.Next = null;
        }
        public ListNode()
        {
            this.Data = default(T);
            this.Next = null;
        }
    }
 

 

public class ListNodeMethod<T>
    {
        public ListNode<T> Head { set; get; }//单链表头
        ListNode<T> A = new ListNode<T>();
        ListNode<T> B = new ListNode<T>();
        public ListNodeMethod()
        {
            Head = null; 
        }
        /// <summary>
        /// 增加新元素到单链表末尾
        /// </summary>
        /// <param name="Item"></param>
        public void Append(T Item)
        {
            ListNode<T> foot = new ListNode<T>(Item);
           // ListNode<T> A = new ListNode<T>();
            if(Head == null)          //添加头结点
            {
                Head = foot;
                return;
            }
            A = Head;
            while (A.Next != null)    //单链表是”不走回头路“,所以每次增加都要从单链表的头开始找到单链表最后一个结点(最后一个结点就是Next为NULL),
                                      //然后把最后一个结点的Next设置成需增加的结点,这时要需增加的结点变身为最后一结点,他的Next为NULL。
            {
                A=A.Next;
            }
            A.Next = foot;
        }

 

        public void Delete(int Index)
        {
            //删除头节点
            if(Index == 1)
            {
                Head = Head.Next;  //将下一个结点赋值给头结点啊
                return;
            }

            //删除非结点
            B = Head;
            int DeleteIndex = 1;
            if(A.Next != null && DeleteIndex<Index)  //删除结点如果不是头结点。从单链表头开始查询要删除结点的位置。
                //并记录删除的前一结点值A和所要删除的结点B。因为结点B被删除了,所以结点A的Next就应该为B的Next。把结点A的Next设置为结点B的Next。
            { 
                A = B;
                B = B.Next;
                DeleteIndex++;
            }
            if (DeleteIndex == Index)
            {
                A.Next = B.Next;
            }
              
        }
   }

转载于:https://www.cnblogs.com/xingyuanzier/p/11076062.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值