剑指offer 22. 链表中倒数第k个节点

剑指offer 22. 链表中倒数第k个节点

题目描述

在这里插入图片描述

解题思路

主要注意鲁棒性问题:

  • k <= 0
  • 头指针为空
  • k 比链表长度还要大
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public ListNode getKthFromEnd(ListNode head, int k) {
    
    
        if (head == null || k <= 0) return null;
        ListNode fast = head, slow = head;  //快慢指针
        //快指针一共走 k步
        while (k > 0) {
    
    
            if (fast == null) return null;  //如果快指针还没走完 k 步,非法,直接返回
            fast = fast.next;
            k--;
        }
        //快慢指针同时移动,当快指针指向null时,慢指针刚好指在倒数第k的位置
        while (fast != null) {
    
    
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}

猜你喜欢

转载自blog.csdn.net/cys975900334/article/details/115014528