【剑指Offer 15】链表中倒数第k个结点

2017-07-08  本文已影响10人  3e1094b2ef7b

题目:输入一个链表,输出该链表中倒数第k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点。

代码如下:

package demo;

public class Test14 {
    public static class ListNode {
        int value;
        ListNode next;
    }

    public static ListNode findKthToTail(ListNode head, int k) {
        // 链表不能为null,k必须大于0
        if(head == null || k < 1) {
            return null;
        }
        ListNode behindPointer = head;
        ListNode aheadPointer = head;
        for(int i = 0; i < k-1; i++) {
            if(aheadPointer.next != null) {
                aheadPointer = aheadPointer.next;
            } else {
                return null;
            }
        }
    
        while(aheadPointer.next != null) {
            aheadPointer = aheadPointer.next;
            behindPointer = behindPointer.next;
        }
    
        return behindPointer;
    }

    public static void main(String[] args) {
        ListNode head = new ListNode();
        head.value = 1;
        head.next = new ListNode();
        head.next.value = 2;
        head.next.next = new ListNode();
        head.next.next.value = 3;
        head.next.next.next = new ListNode();
        head.next.next.next.value = 4;
        head.next.next.next.next = new ListNode();
        head.next.next.next.next.value = 5;
        head.next.next.next.next.next = new ListNode();
        head.next.next.next.next.next.value = 6;
    
        System.out.println("尾结点:");
        System.out.println(findKthToTail(head, 1).value);
        System.out.println("头结点:");
        System.out.println(findKthToTail(head, 6).value);
        System.out.println("第3个结点:");
        System.out.println(findKthToTail(head, 3).value);
        System.out.println("头结点为null:");
        System.out.println(findKthToTail(null, 1));
        System.out.println("链表结点个数小于k:");
        System.out.println(findKthToTail(head, 10));
        System.out.println("k为0:");
        System.out.println(findKthToTail(head, 0));
    }
}
运行结果

来源:http://blog.csdn.net/derrantcm/article/details/46669025

上一篇下一篇

猜你喜欢

热点阅读