public class LinkList
{
public int data;
public LinkList next;
public void Create(ref LinkList L)
{
L = new LinkList();
LinkList q = L;
L.next = null;
Console.WriteLine("请输入单链表元素:");
string s= " ";
for (int i = 0; i <= 4; i++)
{
LinkList p = new LinkList();
s = Console.ReadLine();
p.data = Int32.Parse(s);
p.next = q.next;
q.next = p;
q = q.next;
}
}
public void Print(LinkList L)
{
LinkList p;
p = L.next;
while (p != null)
{
Console.Write(" "+ p.data);
p = p.next;
}
}
public void Empty(LinkList L)
{
if(L.next!=null) Console.WriteLine ("链表非空");
else Console.WriteLine ("链表为空表");
}//判断单链表是不是空表
public void Clear(LinkList L)
{
L.next =null;
}//将单链表置空
public void GetElem(LinkList L,int i,ref int e)
{
LinkList p=L.next;
int j=1;//计数器
while(p!=null&&j<i)
{
p=p.next;
j++;
}
if(p==null||j>i) Console.WriteLine("error");//第i个元素不存在
e=p.data;//取第i个元素
}//取单链表中第i个元素
public void Delete( ref LinkList L,int i,ref int e)
{
LinkList p=L;
int j=0;//计数器
while ((p.next!=null)&&j<i-1)
{
p=p.next;
j = j + 1;
}
if((p.next==null)||(j>i-1)) Console.WriteLine("error1");
LinkList q=p.next;
p.next=q.next;
e=q.data;//存储删除的元素
}//删除单链表中第i个元素
public void Insert(ref LinkList L,int i,int e)
{
LinkList p=L;
int j=0;
while((p!=null)&&(j<i-1))
{
p=p.next;
j++;
}
if(p==null||j>i-1) Console.WriteLine("error2");
LinkList s=new LinkList();
s.data=e;
s.next =p.next ;
p.next =s;
}//在单链表的第i个元素前插入e
public int Length(LinkList L)
{
int j=0;//用来记录单链表中元素个数
LinkList p=L;
while (p.next!=null)
{
p=p.next;
j++;
}
return j;
}//求单链表中元素个数
}
class Program
{
static void Main(string[] args)
{
int a=0;//用来存储所取元素
int b=0;//用来存储被删除的元素
int c=0;//用来记录单链表长度
LinkList La = new LinkList();
La.Create(ref La);
La.Print(La);
Console.WriteLine();
La.GetElem(La, 3, ref a);
La.Delete(ref La, 4, ref b);
La.Insert(ref La, 1, 99);
c=La.Length(La);
La.Print(La);
Console.WriteLine();
Console.WriteLine("a=" + a + " b=" + b + " c=" + c);
}
}