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

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

代码
  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/p/1712918.html