public static Node find_kth_to_last(Node head, int k) { Node k_result = null; int levels = 0; Node runner = head; while (runner.next != null) { levels++; runner = runner.next; } runner = head; for (int x = 0; x <= (levels - k); x++) { runner = runner.next; if (x == (levels - k)) return runner; } return k_result; }
public void appendToTail(int d) { Node end = new Node(d); Node n = this; while (n.next != null) { n = n.next; } n.next = end; }
public static void print_node(Node head) { Node runner = head; Console.WriteLine("node level 1: " + runner.data); int level = 2; while (runner.next != null) { runner = runner.next; Console.WriteLine("node level " + level + ": " + runner.data); level++; } }
static void Main(string[] args) { // // Question 2.2 // // Implement an algorithm to find the kth to last element of singly linked list. Random rand = new Random(); Node seth = new Node(500); for (int x = 0; x <= 10; x++) { seth.appendToTail(rand.Next(0, 10)); } Console.WriteLine("LinkedList: "); print_node(seth); int k = 5; Node kth = find_kth_to_last(seth,k); Console.WriteLine("k = " + k + ": " + kth.data); Console.ReadLine(); }