2.2 Implement an algorithm to find the nth to last element of a singly linked list.
两个指针间距n-1,后一个指针走到底时返回第一个指针即可,注意要检查cur是否为空,防止n过大。
package Question2_2; public class Question2_2<AnyType> { public static void main(String[] args) { Question2_2<Integer> q = new Question2_2<Integer>(); q.AddToList(4);q.AddToList(5);q.AddToList(6);q.AddToList(7); q.AddToList(1);q.AddToList(0);q.AddToList(1);q.AddToList(8); q.AddToList(3);q.AddToList(2);q.AddToList(5);q.AddToList(4); q.PrintList(); q.FindNthToLast(10).PrintNode(); } private Node<AnyType> head; public Question2_2() { head = new Node<AnyType>(null, null); } public void AddToList(AnyType e) { Node<AnyType> temp = head; while (temp.next != null) temp = temp.next; temp.next = new Node<AnyType>(e, null); } public Node<AnyType> FindNthToLast(int n) { Node<AnyType> pre = head; Node<AnyType> cur = pre; for (int i = 0; i < n; i++) { if (cur == null) return null; cur = cur.next; } while (cur != null) { pre = pre.next; cur = cur.next; } return pre; } public void PrintList() { Node<AnyType> temp = head; while (temp.next != null) { temp = temp.next; System.out.print(temp.data + " "); } System.out.println(); } private class Node<Type> { Node(Type d, Node<Type> n) { data = d; next = n; } void PrintNode() { System.out.println(data); } Type data; Node<Type> next; } }