题目描述:
输入一个链表,输出该链表中倒数第k个结点
/**
* 思路:1. 得到链表的长度
* 2. 通过观察可以发现当 cur 从 head 开始到倒数第 k 个节点所循环的次数 == len - k
* 3. 所以退出循环时 cur 指的就是题目所求的节点
*/
public class Solution {
public int length(ListNode head){
int len = 0;
for(ListNode cur = head;cur!=null;cur = cur.next){
len++;
}
return len;
}
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||head.next==null){
return head;
}
int len = length(head);
if(k <= len){
ListNode cur = head;
for(int i =0;i < len - k;i++){
cur = cur.next;
}
return cur;
}
return null;
}
}
//思路:用两个引用,一个走得快,一个走的慢,当 front==null 时,back 所指就是输出节点
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null){
return null;
}
ListNode front = head;
ListNode back = head;
for(int i=0;i<k;i++){
if(front==null){
return null;
}
front = front.next;
}
while(front!=null){
front = front.next;
back = back.next;
}
return back;
}
}