输入一个链表,找到该链表中倒数第k个结点。
代码
static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}
public static void main(String[] args) {
Node node = new Node(1);
Node node2 = new Node(2);
node.next = node2;
Node node3 = new Node(3);
node2.next = node3;
Node node4 = new Node(4);
node3.next = node4;
// 此时链表是1,2,3,4,k=2,链表倒数第二个节点,即node3
Node tailKth = findTailKth(node, 2);
System.out.println(tailKth.val);
}
private static Node findTailKth(Node head, int k) {
if (head == null || k <= 0) {
return null;
}
// 定义两个指针,fast先走k-1步,为什么要走k-1步,因为fast本身也是一步,在最后一个节点停下了,
// 所以slow距离最后一个节点的距离就是k - 1 + 1 = k
Node slow = head, fast = head;
for (int i = 0; i < k - 1; i++) {
if (fast.next != null) {
fast = fast.next;
} else {
return null;
}
}
// 然后两个指针一起走,直到fast走到链表的最后一个节点
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}