题目
输入一个链表,输出该链表中倒数第k个结点。
解法
一共可以有三个解法思路。
(1)循环一遍链表得到链表长度length,之后再次循环定位倒数第k个元素。
(2)从第一个节点开始遍历,每次都只遍历k个元素,如果第k个元素的next是null,则得到了倒数第k个。
(3)第三种就是下面这种,前后两个指针,两个指针之间的长度为k,当前指针到链表尾部的时候,后指针指向的就是倒数第k个。(最优)
public class test14 {
public static void main(String[] args) {
ListNode node1 = new ListNode(6);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(9);
ListNode node4 = new ListNode(0);
ListNode node5 = new ListNode(2);
ListNode node6 = new ListNode(5);
FindKthToTail(node1, 8);
}
public static ListNode FindKthToTail(ListNode head, int k) {
//这些判断小于0以及null的代码也很重要!!!!
if (k <= 0) {
return null;
}
if (head == null) {
return null;
}
ListNode first = head;
ListNode last = head;
for (int i = 0; i < k - 1; i++) {
if (first.next != null) {
first = first.next;
} else {
return null;
}
}
while (first.next != null) {
first = first.next;
last = last.next;
}
return last;
}
}
//
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}