《剑指offer》——链表中倒数第k个结点

来源:互联网 发布:专气致柔 能婴儿乎 编辑:程序博客网 时间:2024/05/28 11:47

T:

题目描述
输入一个链表,输出该链表中倒数第k个结点.

这种考题是比较简单的一种,以前也碰到过类似的题目,从耗时来说,一般都是使用两个指针,一前一后的走,中间间隔k或者k-1个步长,这个视判断语句而定。当前一个指针走到末端时,后一个指针正好落在倒数第k个节点处,直接返回该节点。

code:

    /*    public class ListNode {        int val;        ListNode next = null;        ListNode(int val) {            this.val = val;        }    }*/    /**     * T:链表中倒数第k个结点     *      * 题目描述      * 输入一个链表,输出该链表中倒数第k个结点。     *      * date: 2015.11.13  20:22     * @author SSS     *     */    public class Solution {        /**         * 前后两个指针,间隔为k-1个距离即可,前一个指针走了k步之后,后一个指针也从原点出发,         * 当前一个指针走都末尾了之后,第二个指针停留的位置就在倒数第k个节点上,返回即可。         * @param head         * @param k         * @return         */        public ListNode FindKthToTail(ListNode head,int k) {           int postIndex = 0;            ListNode targetNode = head;            if (k <= 0 || head == null) {                return null;            }            ListNode node = head;            int count = 0;            while (node != null) {                if (postIndex ++ >= k) {                    targetNode = targetNode.next;                }                node = node.next;                count ++;            }            // 是否k的值大于了链表的长度            if (count < k) {                return null;            }            return targetNode;        }    }
0 0
原创粉丝点击