• 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);
            }
        }
    }
    
  • 相关阅读:
    MySQL5.6.26升级到MySQL5.7.9实战方案【转】
    bootstrap-markdown编辑器引入
    yii获取当前url和域名
    RabbitMQ消息队列在PHP下的应用
    解决 PHPExcel 长数字串显示为科学计数
    Linux实现https方式访问站点
    layui关闭弹出层
    vscode中iframe的使用
    tomcat运行超时问题解决
    Linux安装solr
  • 原文地址:https://www.cnblogs.com/Ligeance/p/2216440.html
Copyright © 2020-2023  润新知