链表

c#

 class Link
    {
        public Node Head { get; set; }

        public Link()
        {
            Head = new Node("head");
        }

        public  Node Reverse()
        {
            Node curr = this.Head.Next;
            Node next = null;
            Node nextnext = null;

            if (curr == null || curr.Next == null)
            {
                return this.Head;
            }

            while (curr.Next != null)
            {
                next = curr.Next;
                nextnext = next.Next;

                next.Next = this.Head.Next;
                this.Head.Next = next;
                curr.Next = nextnext;

            }
            return this.Head;

        }

        public Node RecursionReverse(Node n)
        {
            if (n.Next == null)
                return n;
            Node head = RecursionReverse(n.Next);
            n.Next.Next = n;
            n.Next = null;
            return head;
        }

        public void Display()
        {
            Node curr = this.Head;
            StringBuilder sb = new StringBuilder();
            while (curr != null)
            {
                sb.Append(curr.Data+" ");
                curr = curr.Next;
            }
            Console.WriteLine(sb.ToString());
        }

        public void ReverseDisplay(Node n)
        {
            
            if (n!= null)
            {
                ReverseDisplay(n.Next);
                Console.WriteLine(n.Data);
            }
        }

        public void Insert(Node n)
        {
            Node curr = this.Head.Next;

            if (curr == null)
            {
                this.Head.Next = n;
            }
            else
            {
                while (curr.Next != null)
                {
                    curr = curr.Next;
                }

                curr.Next = n;

            }
        }

        public void Insert(Node n, string after)
        {
            Node curr = this.Head.Next;

            if (curr == null)
            {
                this.Head.Next = n;
            }
            else
            {
                if (curr.Next == null)
                {
                    curr.Next = n;
                }
                else
                {
                    while (curr.Next != null && curr.Next.Data != after)
                    {
                        curr = curr.Next;
                    }
                    if (curr.Next == null)
                    {
                        curr.Next = n;
                    }
                    else
                    {
                        n.Next = curr.Next.Next;
                        curr.Next.Next = n;
                    }
                }
            }


        }

        public Node Find(string data)
        {
            Node curr = this.Head.Next;

            while (curr != null && curr.Data != data)
            {
                curr = curr.Next;
            }

            return curr;
        }
    }

    class Node
    {
        public Node Next { get; set; }
        public string Data { get; set; }
        public Node(string data)
        {
            this.Next = null;
            this.Data = data;
        }
    }

 

posted @ 2015-03-15 16:01  fannet  阅读(123)  评论(0)    收藏  举报