为了能够遍历一次就能找到倒数第K个节点,可以定义两个指针 1.第一个指针从链表头指针开始遍历,向前走k-1步,第二个指针不动。 2.从第k步开始,第二个指针也开始从链表头指针开始遍历 由于两个指针的距离保持K-1,当第一个指针到达链表的尾节点时,第二个指针指向的正好是倒数第k个节点
public static Node FindKthToTail(Node head,int k) { if (head == null || k == 0) { return null; } Node ahead = head; Node behind = null; for (int i = 0; i < k - 1; i++) { if (ahead.next != null) { ahead = ahead.next; } else { return null; } } behind = head; while (ahead.next != null) { ahead = ahead.next; behind = behind.next; } return behind; } public static class Node{ public int data; public Node next; public Node(int data) { this.data = data; } }