这里为什么只输出了第一个数字

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            LinkHead<int> node = new LinkHead<int>();
            node.AddLast(1);
            node.AddLast(5);
            node.AddLast(6);
            node.Display();
        }
    }
    class Node<T>
    {
        public T Date { get; internal set; }
        public Node<T> Next { get; internal set; }
        public Node(T date)
        {
            this.Date = date;
        }
        public Node()
        {
            //……
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class LinkHead<T>
    {
        public Node<T> Head { get; private set; }
        public void AddLast(T item)
        {
            Node<T> p = new Node<T>(item);
            Node<T> q = new Node<T>();
            if(Head==null)
            {
                Head = p;
                return;
            }
            q = Head;
            while(q!=null)
            {
                q = q.Next;
            }
            q = p;
        }

        public void Display()
        {
            Node<T> a = new Node<T>();
            a = Head;
            while(a!=null)
            {
                Console.WriteLine(a.Date);
                a=a.Next;
            }
        }
    }
}

img

逻辑有问题,单链表的第一个节点你就断了,用我的代码试试:

    class LinkHead<T>
    {
        public Node<T> Head { get; private set; }
        public Node<T> Foot { get; private set; }
        public void AddLast(T item)
        {
            Node<T> p = new Node<T>(item);
            if (Head == null)
            {
                Head = p;
                Foot = Head;
                return;
            }
            else
            {
                Foot.Next = p;
                Foot = p;
            }
        }

        public void Display()
        {
            Node<T> a = Head;
            do
            {
                Console.WriteLine(a.Date);
                a = a.Next;
            } while (a != Foot.Next);
        }
    }

逻辑有问题,单向链表的第一个节点你就断了,用我的代码试试:

    class LinkHead<T>
    {
        public Node<T> Head { get; private set; }
        public Node<T> Foot { get; private set; }
        public void AddLast(T item)
        {
            Node<T> p = new Node<T>(item);
            if (Head == null)
            {
                Head = p;
                Foot = Head;
                return;
            }
            else
            {
                Foot.Next = p;
                Foot = p;
            }
        }

        public void Display()
        {
            Node<T> a = Head;
            do
            {
                Console.WriteLine(a.Date);
                a = a.Next;
            } while (a != Foot.Next);
        }
    }

img

怎么调用的

img
大佬,第一处画横线的地方我修改成q.Next!=null,第二处修改成q.Next=p,这样就能成功输出了,这是为什么呢?