其他几个自定义删除,插入,获取
//求链表长度
public int ListLength()
{
int n = 0;
ListNode testNode = new ListNode(null);
testNode = firstNode;
while(testNode != null)
{
n++;
testNode = testNode.Next;
}
return n;
}
//取链表中第i个节点的值
public object GetNode(int i)
{
int j = 1;
ListNode testNode = new ListNode(null);
testNode = firstNode;
while(j<i && testNode != null)//查找第i个节点
{
testNode = testNode.Next;
j++;
}
if(testNode != null)//找到
return testNode.Data;
else
{
Console.Write("参数错误!");
return false;
}
}
//查找值的位置
//如果没有找到返回一个固定的值-1
public int ListLocate(object testItem)
{
int n = 0;
ListNode testNode = new ListNode(null);
testNode = firstNode;
while(testNode != null && testNode.Data.ToString() != testItem.ToString())//查找data域为testItem的第一个节点
{
testNode = testNode.Next;
n++;
}
if(testNode == null)//未找到
return -1;
else
return n+1;
}
//在任意位置插入
public void InsertAtAnyplace(object insertItem,int i)
{
lock(this)
{
int j = 1;
ListNode InsertNode = new ListNode(insertItem);
ListNode testNode = new ListNode(null);
testNode = firstNode;
if(i == 1)
{
InsertNode.Next = testNode;
firstNode = InsertNode;
}
else
{
while(j < i-1 && testNode.Next != null)
{
testNode = testNode.Next;
j++;
}
if(j == i-1)
{
InsertNode.Next = testNode.Next;//将InsertNode节点插入testNode之后
testNode.Next = InsertNode;
}
else
Console.Write("\n位置错误!");
}
}
}
//删除任意节点
public void RemoveAnyplace(int i)
{
int j=1;
ListNode testNode = new ListNode(null);
testNode = firstNode;
if(IsEmpty())
throw new EmptyListException(name);
if(i == 1) //删除表头
{
firstNode = testNode.Next;
}
else
{
while(j < i-1 && testNode.Next != null)//查找第i-1个节点
{
testNode = testNode.Next;
j++;
}
if(testNode.Next != null && j == i-1)//找到第i-1个节点 将testNode指向他
{
testNode.Next = testNode.Next.Next;
}
else
Console.Write("\n位置不正确!");
}
}
//求链表长度
public int ListLength()
{
int n = 0;
ListNode testNode = new ListNode(null);
testNode = firstNode;
while(testNode != null)
{
n++;
testNode = testNode.Next;
}
return n;
}
//取链表中第i个节点的值
public object GetNode(int i)
{
int j = 1;
ListNode testNode = new ListNode(null);
testNode = firstNode;
while(j<i && testNode != null)//查找第i个节点
{
testNode = testNode.Next;
j++;
}
if(testNode != null)//找到
return testNode.Data;
else
{
Console.Write("参数错误!");
return false;
}
}
//查找值的位置
//如果没有找到返回一个固定的值-1
public int ListLocate(object testItem)
{
int n = 0;
ListNode testNode = new ListNode(null);
testNode = firstNode;
while(testNode != null && testNode.Data.ToString() != testItem.ToString())//查找data域为testItem的第一个节点
{
testNode = testNode.Next;
n++;
}
if(testNode == null)//未找到
return -1;
else
return n+1;
}
//在任意位置插入
public void InsertAtAnyplace(object insertItem,int i)
{
lock(this)
{
int j = 1;
ListNode InsertNode = new ListNode(insertItem);
ListNode testNode = new ListNode(null);
testNode = firstNode;
if(i == 1)
{
InsertNode.Next = testNode;
firstNode = InsertNode;
}
else
{
while(j < i-1 && testNode.Next != null)
{
testNode = testNode.Next;
j++;
}
if(j == i-1)
{
InsertNode.Next = testNode.Next;//将InsertNode节点插入testNode之后
testNode.Next = InsertNode;
}
else
Console.Write("\n位置错误!");
}
}
}
//删除任意节点
public void RemoveAnyplace(int i)
{
int j=1;
ListNode testNode = new ListNode(null);
testNode = firstNode;
if(IsEmpty())
throw new EmptyListException(name);
if(i == 1) //删除表头
{
firstNode = testNode.Next;
}
else
{
while(j < i-1 && testNode.Next != null)//查找第i-1个节点
{
testNode = testNode.Next;
j++;
}
if(testNode.Next != null && j == i-1)//找到第i-1个节点 将testNode指向他
{
testNode.Next = testNode.Next.Next;
}
else
Console.Write("\n位置不正确!");
}
}