public class Node { public object Element; public Node Link; public Node() { Element = null; Link = null; } public Node(object theElement) { Element = theElement; Link = null; } }
public class LinkedList { //头结点 protected Node Header; private int count; public LinkedList() { count = 0; Header = new Node("header"); Header.Link = Header; } public bool IsEmpty() { return (Header.Link == null); } public void MakeEmpty() { Header.Link = null; } public void PrintList() { Node current = new Node(); current = Header; while (current.Link.Element.ToString() != "header") { Console.WriteLine(current.Link.Element); current = current.Link; } } private Node FindPrevious(object n) { Node current = Header; while (!(current.Link == null) && current.Link.Element != n) { current = current.Link; } return current; } private Node Find(object item) { Node current = new Node(); current = Header.Link; while (current.Element != item) { current = current.Link; } return current; } public void Insert(object newItem, object after) { Node current = new Node(); Node newNode = new Node(newItem); current = Find(after); newNode.Link = current.Link; current.Link = newNode; count++; } public void Remove(object n) { Node p = FindPrevious(n); if (!(p.Link == null)) { p.Link = p.Link.Link; count--; } } public void InsertFirst(object n) { Node current = new Node(n); current.Link = Header; Header.Link = current; count++; } public Node Move(int n) { Node current = Header.Link; Node tmp; for (int i = 0; i <= n; i++) { current = current.Link; } if (current.Element.ToString() == "header") { current = current.Link; } tmp = current; return tmp; } public Node GetFirst() { return Header; } }