今天开博了2007-7-16

开博没有太监的客。。。

 

c#数据结构———链表2

其他几个自定义删除,插入,获取

         //求链表长度

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

               }

          }

posted on 2005-04-21 21:25  胡敏  阅读(3783)  评论(6)    收藏  举报

导航