为博客园上一道面试题写的代码-一道求单向链表倒数第N个结点的算法题。

题目: 一道求单向链表倒数第N个结点的算法题。

 

ExpandedBlockStart.gif 代码
  1  namespace  LinkedList
  2  {
  3       class  Program
  4      {
  5           static   void  Main( string [] args)
  6          {
  7              
  8              
  9               while  ( true )
 10              {
 11                  Console.WriteLine( " 请输入你需要得到倒数第几个元素,最大为99,输入其它程序将出错 " );
 12                   string  iNum  =  Console.ReadLine().ToString();
 13                   if  (iNum  == " Q " )
 14                  {
 15                       return  ;
 16                  }
 17                   int  index  =  Convert.ToInt32(iNum);
 18 
 19                  Node < int >  node  =   new  Node < int > ( 0 );
 20                  LinKHead < int >  link  =   new  LinKHead < int > (node);
 21                   for  ( int  i  =   1 ; i  <=   100 ; i ++ )
 22                  {
 23 
 24                      node.NexNode  =   new  Node < int > (i);
 25                      node  =  node.NexNode;
 26                  }
 27 
 28                  Console.WriteLine(  " 倒数第N个元素为: " + link.GetNode(index,  true ).Value.ToString());
 29                  Console.WriteLine( " 退出请按输入“Q”,继续测试请输入测试位置Num " );
 30 
 31              }
 32          }
 33      }
 34       class  Node < T >
 35      {
 36 
 37           private  T value;
 38 
 39           public  T Value
 40          {
 41               get  {  return   this .value; }
 42               set  {  this .value  =  value; }
 43          }
 44           private  Node < T >  nextNode;
 45 
 46           public  Node < T >  NexNode
 47          {
 48               get  {  return  nextNode; }
 49               set  { nextNode  =  value; }
 50          }
 51           public  Node(T value)
 52          {
 53               this .value  =  value;
 54          }
 55      }
 56       class  LinKHead < T >
 57      {
 58           private  Node < T >  headNode;
 59 
 60           internal  Node < T >  HeadNode
 61          {
 62               get  {  return  headNode; }
 63               set  { headNode  =  value; }
 64          }
 65 
 66           public  LinKHead(Node < T >  node)
 67          {
 68              headNode  =  node;
 69          }
 70           public  Node < T >  GetValue(Node < T >  node1, Node < T >  node2)
 71          {
 72               while  ( true )
 73              {
 74                   if  (node2.NexNode  ==   null )
 75                  {
 76                       return  node1;
 77                  }
 78                  node1  =  node1.NexNode;
 79                  node2  =  node2.NexNode;
 80              }
 81          }
 82           public  Node < T >  GetNode( int  index,  bool  flag)
 83          {
 84               if  ( ! flag)
 85              {
 86                   return   null ;
 87              }
 88               else
 89              {
 90                  Node < T >  node  =  headNode;
 91                  Node < T >  node1, node2;
 92                  node2  =  node1  =  headNode;
 93                   int  p1, p2, tmp;
 94                  p1  =  p2  =  tmp  =   0 ;
 95                   while  ( true )
 96                  {
 97                       if  (node.NexNode  ==   null )
 98                      {
 99                          p1  =  tmp;
100                          node  =  node2;
101                           return  GetValue(node1, node);
102                      }
103                       else   if  (p1  -  tmp  ==  index)
104                      {
105                          node1  =  node2;
106                          p2  =  tmp;
107                          node2  =  node;
108                          tmp  =  p1;
109                          p1 ++ ;
110 
111                          node  =  node.NexNode;
112                      }
113                       else
114                      {
115 
116                          p1 ++ ;
117                          node  =  node.NexNode;
118 
119                      }
120 
121                  }
122 
123              }
124          }
125      }
126  }
   算法L题目上已经说明,我只是实现一下,提高自己敲代码的熟练能力。

 

 

转载于:https://www.cnblogs.com/hda37210/archive/2010/04/15/1712918.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值