这个题目的主要问题就是怎么找到目标结点的位置
当然可以用两次遍历,第一遍确定位置,第二遍找到
可以定义一个指针指向链表开始的后面的第K个位置,那么从头结点到k,也就是0到k这端就相当于一个气泡,两个指针向后移,当k出去时(指向k的指针指向null,也就是出链表了),那么前面的指针指向的就是目标结点,就好像一个气泡往上浮(我愿称之为冒泡算法)
public ListNode getKthFromEnd(ListNode head, int k) {
/** 两个指针,一个指向开始位置0,一个指向第一个指针后的第k个的位置 0+k */
ListNode left = head;
ListNode right = head;
/** 两个指针相隔k,同时向后移动,当第二个指针指向null时候,刚好第一个指针指向目标位置*/
for (int i = 0; i < k; i++) {
right = right.next;
}
while(right != null){
right = right.next;
left = left.next;
}
return left;
}