c#中没有指针的概念,所以这个单链表是由list组成。为了适应不同类型的数据,如果使用object,那么就会出现装箱拆箱,占用资源,用泛型最为合适。代码为最简单的增删改查,主要是记录一下,以防忘记。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
LinkList<int> list = new LinkList<int>();
list.Append(1);
list.Append(3);
list.Insert(1,2);
list.Display();
Console.WriteLine("list length : "+list.GetLength().ToString());
while(true);
}
}
//定义节点
public class Node<T>
{
public T Data { get; set; }
public Node<T> Next;
public Node(T item)
{
this.Data = item;
this.Next = null;
}
public Node()
{
this.Data = default(T);
this.Next = null;
}
}
//创建链表
public class LinkList<T>
{
Node<T> Head = new Node<T>();
public LinkList()
{
Clean();
}
public void Append(T item)
{
Node<T> foot = new Node<T>(item);
if (Head == null)
{
Head = foot;
return;
}
Node<T> tempNode = Head;
while (tempNode.Next != null)
tempNode = tempNode.Next;
tempNode.Next = foot;
}
public void Insert(int n,T item)
{
if (n > GetLength() || n<1 || Head == null)
{
Console.WriteLine("插入位置不正确");
return;
}
Node<T> tempNode = Head;
Node<T> insertNode = new Node<T>(item);
int i = 1;
while (tempNode.Next != null && i < n)
{
tempNode = tempNode.Next;
i++;
}
if (i == n)
{
insertNode.Next = tempNode.Next;
tempNode.Next = insertNode;
}
}
public void Clean()
{
Head = null;
}
public int GetLength()
{
Node<T> tempNode = Head;
int i = 0;
while (tempNode != null)
{
tempNode = tempNode.Next;
i++;
}
return i;
}
public void Display()
{
Node<T> tempNode = Head;
while (tempNode != null)
{
Console.WriteLine(tempNode.Data);
tempNode = tempNode.Next;
}
}
}
}