题目描述
输入一个链表,输出该链表中倒数第k个结点。
数据结构:
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
解法1:
将查找分为两次,第一次遍历整个链表,统计结点个数为n,第二次查找第n-k+1节点即可。
解法2:
利用两个指针结点,两个之间相差k-1个结点,当后边的结点遍历到链表尾的时候,前一个结点指向的就是倒数第k个结点。
解法3:
将链表转化为数组。
代码如下:
public ListNode FindKthToTail(ListNode head, int k) {
List<ListNode> list = new ArrayList<>();
while (head != null){
list.add(head);
head = head.next;
}
return k > list.size() ? null : k == 0 ? null :list.get(list.size() - k);
}