链表中倒数第k个结点

剑指 offer

题目描述

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

思路:

使用两个指针,第一个直线先指向第 k 个结点,然后两个指针一起移动当第一个指针移动到末尾,那么第二个指针指向的元素就是倒数第 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) {
        ListNode first=head,second=head;
        int num=0;
        while(first!=null){
            first=first.next;
            num++;
            if(num==k){
                break;
            }
        }
        if(num!=k){
            return null;
        }
        while(first!=null){
            first=first.next;
            second=second.next;
        }
        return second;
    }
}

相关题目:

求链表的中间结点。如果链表中的结点总数为奇数,则返回中间结点,如果结点数是偶数,则返回中间两个结点的任意一个。 同样方法两个指针一个移动一步,一个移动两步,当走的快的指针走到链表的末尾时,走的慢的指针正好在链表的中间。

posted @ 2018-07-25 10:22  罗贱人  阅读(150)  评论(0编辑  收藏  举报