Leetcode刷题之旅--剑指 Offer 22. 链表中倒数第k个节点

题目描述:
Leetcode刷题之旅--剑指 Offer 22. 链表中倒数第k个节点_第1张图片

思路:最简单的做法是遍历两次链表,第一次得到节点数,第二次找到倒数第k个节点。如果要求只遍历一次的话那么就需要双指针:第一个指针先走k-1个节点,之后两个指针一起移动直到第一个指针到末尾。其中需要注意的是处理:1.输入k=0 2. 输入的head为null 3.移动k-1是否超出整个链表。

/**
 * 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 first=head;
        ListNode second=head;
        for(int i=1;i<k;i++){
            if(first.next!=null)first=first.next;
            else return null;
        }
        while(first.next!=null){
            first=first.next;
            second=second.next;
        }
        return second;
    }
}

你可能感兴趣的:(Leetcode刷题之旅--剑指 Offer 22. 链表中倒数第k个节点)