zoukankan      html  css  js  c++  java
  • C# 单链表 LinkedList

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace LinkedList
    {
        public interface IListDS<T>
        {
            int GetLength();
            void Clear();
            bool IsEmpty();
            void Append(T item);
            void Insert(T item, int i);
            T Delete(int i);
            //T GetElem(int i);
            int Locate(T value);
        }
    
        public class Node<T>
        {
            private T _data;
            private Node<T> _next;
    
            public Node(T val, Node<T> P)
            {
                _data = val;
                _next = P;
            }
    
            public Node(T val)
            {
                _data = val;
            }
    
            public Node(Node<T> P)
            {
                _next = P;
            }
    
            public Node()
            {
                _data = default(T);
            }
    
            public T Data
            {
                get
                {
                    return _data;
                }
                set
                {
                    _data = value;
                }
            }
    
            public Node<T> Next
            {
                get
                {
                    return _next;
                }
                set
                {
                    _next = value;
                }
            }
        }
    
        public class LinkedList<T> : IListDS<T>
        {
            private Node<T> _head;
    
            public Node<T> Head
            {
                get
                {
                    return _head;
                }
                set
                {
                    _head = value;
                }
            }
    
            public LinkedList()
            {
                _head = null;
            }
    
            public int GetLength()
            {
                Node<T> p = _head;
                int len = 0;
    
                while (p != null)
                {
                    len++;
                    p = p.Next;
                }
                return len;
            }
    
            public void Clear()
            {
                _head = null;
            }
    
            public bool IsEmpty()
            {
                if (_head == null)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
            public void Append(T iteam)
            {
                Node<T> p = _head;
                Node<T> q = new Node<T>(iteam);
    
                if (_head == null)
                {
                    _head = q;
                    return;
                }
    
                while (p.Next != null)
                {
                    p = p.Next;
                }
    
                p.Next = q;
            }
    
            public void Insert(T item, int i)
            {
                if (IsEmpty() || i < 1)
                {
                    throw new ArgumentException("List is empty or position is error.");
                }
    
                if (i == 1)
                {
                    Node<T> p = new Node<T>(item);
                    p.Next = _head;
                    _head = p;
                    return;
                }
    
                Node<T> q = _head;
                Node<T> r = new Node<T>();
                int j = 0;
                while (q.Next != null && j < i)
                {
                    r = q;
                    q = q.Next;
                    j++;
                }
    
                if (j == i)
                {
                    Node<T> t = new Node<T>(item);
                    r.Next = t;
                    t.Next = q;
                }
                else
                {
                    throw new ArgumentException("Position is error.");
                }
            }
    
            public void InsertPost(T item, int i)
            {
                if (IsEmpty() || i < 1)
                {
                    throw new ArgumentException("List is empty or position is error");
                }
    
                Node<T> q = _head;
                int j = 0;
                while (q.Next != null && j < i)
                {
                    q = q.Next;
                    j++;
                }
    
                if (j == i)
                {
                    Node<T> t = new Node<T>(item);
                    t.Next = q.Next;
                    q.Next = t;
                }
                else
                {
                    throw new ArgumentException("Position is error.");
                }
            }
    
            public T Delete(int i)
            {
                if (IsEmpty() || i < 1)
                {
                    throw new ArgumentException("List is null or position is error.");
                }
    
                Node<T> p = _head;
                Node<T> q = new Node<T>();
                int j = 0;
    
                while (p.Next != null && j<i)
                {
                    q = p;
                    p = p.Next;
                    j++;
                }
    
                if (j == i)
                {
                    q.Next = p.Next;
                    return p.Data;
                }
                else
                {
                    throw new ArgumentException("The " + i + "th node is not exsit.");
                }
            }
    
            public T GetItem(int i)
            {
                if (IsEmpty() || i < 1)
                {
                    throw new ArgumentException("List is empty or postion is error.");
                }
    
                Node<T> p = _head;
                int j = 0;
    
                while (p.Next != null && i < j)
                {
                    p = p.Next;
                    j++;
                }
    
                if (j == i)
                {
                    return p.Data;
                }
                else
                {
                    throw new ArgumentException("The "+ i + "th node is not exsit.");
                }
            }
    
            public int Locate(T item)
            {
                if (IsEmpty())
                {
                    throw new ArgumentException("List is empty.");
                }
    
                Node<T> p = _head;
                int i = 0;
                while (p!=null)
                {
                    if (p.Data.Equals(item))
                    {
                        return i;
                    }
                    p = p.Next;
                    i++;
                }
                throw new ArgumentException("Can't find item in LinkedList");
            }
    
            public LinkedList<int> CreateLinkedListHead()
            {
                LinkedList<int> L = new LinkedList<int>();
                int d = Int32.Parse(Console.ReadLine());
    
                while (d != -1)
                {
                    Node<int> p = new Node<int>(d);
                    p.Next = L.Head;
                    L.Head = p;
                    d = Int32.Parse(Console.ReadLine());
                }
                return L;
            }
    
            public LinkedList<int> CreateLinkedListTail()
            {
                LinkedList<int> L = new LinkedList<int>();
                Node<int> R = new Node<int>();
                int d = Int32.Parse(Console.ReadLine());
                R = L.Head;
    
                while (d != -1)
                {
                    Node<int> p = new Node<int>(d);
                    if (L.Head == null)
                    {
                        L.Head = p;
                    }
                    else
                    {
                        R.Next = p;
                    }
                    R = p;
                    d = Int32.Parse(Console.ReadLine());
                }
                if (R != null)
                {
                    R.Next = null;
                }
                return L;
            }
    
            public void DisplayLinkedList(LinkedList<T> L)
            {
                Node<T> p = L.Head;
                while (p != null)
                {
                    Console.Write(p.Data + " ");
                    p = p.Next;
                }
                Console.WriteLine();
            }
    
            public void ReverseLinkedList(LinkedList<T> L)
            {
                Node<T> curr = L.Head;
                Node<T> next = null;
                Node<T> nextnext = null;
    
                if (curr == null || curr.Next == null)
                {
                    return;
                }
    
                while (curr.Next != null)
                {
                    next = curr.Next;
                    nextnext = next.Next;
                    next.Next = L.Head;
                    L.Head = next;
                    curr.Next = nextnext;
                }
            }
    
            public LinkedList<int> MergeLinkedList(LinkedList<int> Ha, LinkedList<int> Hb)
            {
                LinkedList<int> Hc = new LinkedList<int>();
                Node<int> p = Ha.Head;
                Node<int> q = Hb.Head;
                Node<int> c = new Node<int>();
    
                while (p!=null && q!=null)
                {
                    if (p.Data > q.Data)
                    {
                        c = q;
                        q = q.Next;
                    }
                    else
                    {
                        c = p;
                        p = p.Next;
                    }
                    Hc.Append(c.Data);
                }
                if (q!=null)
                {
                    p = q;
                }
                while (p !=null)
                {
                    Hc.Append(p.Data);
                    p = p.Next;
                }
                return Hc;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                LinkedList<int> L = new LinkedList<int>();
                L = L.CreateLinkedListTail();
                LinkedList<int> M = new LinkedList<int>();
                M = M.CreateLinkedListTail();
                LinkedList<int> N = new LinkedList<int>().MergeLinkedList(L, M);
                //L.DisplayLinkedList(L);
                //L.ReverseLinkedList(L);
                //L.DisplayLinkedList(L);
    
                N.DisplayLinkedList(N);
            }
        }
    }
    
  • 相关阅读:
    与灵感之源的vb.net对应的SmartExcel的C#版本
    winform下提高control在UI中的响应速度
    做了一个petoolkit的gui版本,放几张图上来。
    Reflection中对于out类型的获取
    对企业管理软件“代码后”问题的思考
    看了dannyr的java中文类,自己写了一个。
    所有的WMI可以使用的class
    庆祝浪潮集团成为微软在中国的第四家全球战略合作伙伴!(暂时放首页两天)
    一种系统间集成的同步事务异常处理方法和装置
    一种实现多线并行拣选的方法
  • 原文地址:https://www.cnblogs.com/Ligeance/p/2216440.html
Copyright © 2011-2022 走看看