剑指Offer-链表中倒数第k个结点

链表中倒数第k个结点

题目

输入一个链表,输出该链表中倒数第k个结点。

思路

两个指针的问题。让一个指针先走k,另外一个指针后走,保证当前指针比先走的指针晚k步。

代码

public class FindKthToTail {
    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }

    public ListNode FindKthToTail(ListNode head,int k) {
        //双节点的问题,一个节点先走k,那么就能保证先走的比后走的大k
        if (head==null||k<1){
            return null;
        }
        ListNode pre = head;
        for (int i=1;i<k;i++){
            if (pre.next!=null){
                pre = pre.next;
            }else {
                return null;
            }
        }

        while (pre.next!=null){
            head = head.next;
            pre = pre.next;
        }

        return head;
    }
}
0%