Grisson's .net

源码之前,了无秘密

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
其他几个自定义删除,插入,获取

         
//求链表长度

         
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<&& 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位置不正确!");

               }


          }


posted on 2005-08-30 18:40  海盗  阅读(340)  评论(0编辑  收藏  举报