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);
            }
        }
    }
    
  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/Ligeance/p/2216440.html
Copyright © 2011-2022 走看看