链表

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