题目链接
题目描述
输入一个链表,输出该链表中倒数第k个结点。
第一种方法:遍历一遍,获取链表元素个数,然后再遍历一遍,返回结点
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if (head == null)
return head;
int count = 0;
ListNode cur = head;
while (cur != null) {
cur = cur.next;
count++;
}
if (count < k)
return null;
cur = head;
for (int i = 0; i <= count - k; i++) {
cur = cur.next;
}
return cur;
}
}
第二种方法,定义快慢指针,快指针先走 k 步,慢指针再走。快指针走到链表尾部时,慢指针所在位置就是倒数第k个结点。注意边界判断:k 可能小于链表元素个数。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if (head == null)
return head;
ListNode slow = head;
ListNode fast = head;
int i = 0;
for (; cur != null; i++) {
if (i >= k) {
slow = slow.next;
}
fast = fast.next;
}
if (i < k)
return null;
return ret;
}
}