题目分析
输入一个链表,输出该链表中倒数第k个结点。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
// k 的特殊情况
if(k <= 0) {
return null;
}
// 链表为空
if(head == null) {
return null;
}
// 链表不为空但是链表长度不足 k
ListNode temp = head;
int l = 0; // 记录链表长度
while(temp != null) {
temp = temp.next;
l += 1;
}
if(l < k) {
return null;
}
// 长度刚好为 k,提高效率
if(l == k) {
return head;
}
// 正常情况,快慢指针
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i < k - 1; i++) {
fast = fast.next;
}
while(fast.next != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
网友评论