C#泛型实现链表 (借鉴别人的文章自己实现了一遍,添了点功能函数)

xiaoxiao2025-05-07  42

public class MyLinkList<T> { private Node<T> head; public Node<T> Head { set { head = value; } get { return head; } } public MyLinkList () { Head = null; } //清除链表 public void Clear () { Head = null; } //获取链表长度 public int GetLength () { int i = 0; Node<T> p = Head; while (p != null) { ++i; p = p.Next; } return i; } //链表尾部添加节点 public void AddEnd (T tump) { Node<T> n = new Node<T> (tump); if (IsEmpty ()) { Head = n; } else { Node<T> p = Head; while (p.Next != null) { p = p.Next; } p.Next = n; } } //判断链表是否为空 public bool IsEmpty () { if (Head == null) { return true; } else return false; } //显示链表数据 public void ShowList () { if (!IsEmpty ()) { Node<T> p = Head; while (p != null) { Console.WriteLine (p.Data); p = p.Next; } } } //链表某个节点后插入数据 public void InsertPost (T tump, int i) { if (IsEmpty ()) { Console.WriteLine ("LinkList is emptry!"); } else if (i < 1 || i > GetLength ()) { Console.WriteLine ("The error for LinkList or Position!"); } else if (!IsEmpty () && i <= GetLength ()) { Node<T> p = Head; int j = 1; while (j < i) { p = p.Next; ++j; } if (j == i) { Node<T> n = new Node<T> (tump); Node<T> r = p.Next; n.Next = r; p.Next = n; } } } //链表的弄个节点前插入数据 public void Insert (T tump, int i) { if (IsEmpty () || i < 1 || i > GetLength ()) { Console.WriteLine ("The error for LinkList or Position!"); } else if (!IsEmpty () && i == 1) { Node<T> n = new Node<T> (tump); n.Next = Head; Head = n; } else if (!IsEmpty () && i <= GetLength ()) { int j = 0; Node<T> p = Head; Node<T> r = new Node<T> (); while (j < i) { r = p; p = p.Next; ++j; if (j == i - 1) { Node<T> n = new Node<T> (tump); n.Next = p; r.Next = n; } } } } //删除链表的某个数据 public T DeleteData (int i) { if (IsEmpty () || i < 0) { Console.WriteLine ("LinkList is empty or Position is error!"); } else if (!IsEmpty () && i == 1) { Node<T> p = new Node<T> (); p = Head; Head = Head.Next; return p.Data; } else if (!IsEmpty () && i == GetLength ()) { Node<T> p = Head; Node<T> n = new Node<T> (); while (p.Next.Next != null) { p = p.Next; } n = p.Next; p.Next = null; return n.Data; } else if (!IsEmpty () && i < GetLength ()) { int j = 1; Node<T> p = Head; Node<T> n = new Node<T> (); while (p != null && j < i) { p = p.Next; ++j; if (j == i - 1) { n = p.Next; p.Next = p.Next.Next; return n.Data; } } Console.WriteLine ("The " + i + "th node is not exist!"); } return default (T); } //获取链表的某个数据 public T GetData (int i) { if (IsEmpty () || i < 0 || i > GetLength ()) { Console.WriteLine ("LinkList is empty or Position is error!"); return default (T); } else if (!IsEmpty () && i == 1) { return Head.Data; } else if (!IsEmpty () && i <= GetLength ()) { int j = 1; Node<T> p = head; while (p != null && j < i) { p = p.Next; ++j; if (j == i) { return p.Data; } } Console.WriteLine ("The " + i + "th node is not exist!"); return default (T); } return default (T); } //根据数据获取节点位置 public int GetPos (T tump) { int i = 1; bool n = true; if (IsEmpty ()) { Console.WriteLine ("LinkList is null or data!"); return -1; } Node<T> p = Head; while (p != null) { if (p.Data.Equals (tump)) { n = false; return i; } else { p = p.Next; ++i; } } if (n) { Console.WriteLine ("The Data is error!"); return -1; } return -1; } } public class Node<T> { private T data; private Node<T> next; public Node (T tump, Node<T> p) { data = tump; next = p; } public Node (T tump) { data = tump; next = null; } public Node (Node<T> p) { next = p; } public Node () { data = default (T); next = null; } public T Data { set { data = value; } get { return data; } } public Node<T> Next { set { next = value; } get { return next; } } }

 

转载请注明原文地址: https://www.6miu.com/read-5030030.html

最新回复(0)