题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
C# codes as below:
using System;
using System.Collections.Generic;
namespace ConsoleApp
{
class RunClass
{
static void Main()
{
Node<int> i1 = new Node<int>() { Value = 4 };
Node<int> i2 = new Node<int>() { Value = 8, Next = i1 };
Node<int> i3 = new Node<int>() { Value = 12, Next = i2 };
Node<int> i4 = new Node<int>() { Value = 16, Next = i3 };
Link<int> link = new Link<int>() { Start = i4 };
Node<int> i = new Helper().GetNode<int>(link, 1);
Console.WriteLine(i.Value);
Console.ReadLine();
}
}
class Helper
{
public Node<T> GetNode<T>(Link<T> link, int index)
{
Node<T> current = link.Start;
Stack<Node<T>> stack = new Stack<Node<T>>();
stack.Push(current);
while (current.Next != null)
{
current = current.Next;
stack.Push(current);
}
if (stack.Count < index + 1 || index < 0)
return null;
else
{
for (int i = 0; i < index; i++)
{
stack.Pop();
}
return stack.Pop();
}
}
}
class Link<T>
{
public Node<T> Start { get; set; }
}
class Node<T>
{
public Node<T> Next { get; set; }
public T Value { get; set; }
}
}