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; }
}
}