美文网首页
23_链表中倒数第k个节点

23_链表中倒数第k个节点

作者: 是新来的啊强呀 | 来源:发表于2020-05-20 16:16 被阅读0次

要求:输入一个链表,输出该链表中倒数第k个结点。
思路:使用快慢(双)指针,准备两个指针A和B,A指针指向头结点,A右移K-1步,此时将B指针指向头结点。A继续右移,B也跟着右移,直到A 指针指向尾结点,此时,B指针所指向的结点就是链表中倒数的第K个结点。
注意:代码的鲁棒性,需要注意几个可能让代码奔溃的细节。1、如果输入的链表头为空,则直接返回空。2、 如果输入的k是0,则直接返回空。3、如果链表结点数少于K个数,则直接返回空。

public class L23_FindKthToTail {
    public static ListNode2 FindKthToTail(ListNode2 ListHead, int k){
        // 细节1和2
        if(ListHead == null || k ==0){
            return null;
        }
        // 创建两个指针A和B
        ListNode2 A = ListHead;
        ListNode2 B = null;
        for(int i=0 ; i<k-1;i++){
            // 将A 指针指向第K位
            if(A.next != null){
                A = A.next;
            }else{
                // 细节3
                // 如果结点数少于K位,直接返回空
                return null;
            }
        }
        // 此时A指向了链表的第k位
        // 将B指向头结点
        B = ListHead;
        // 直到A指向了尾结点
        while(A.next!=null){
            A = A.next;
            B = B.next;
        }
        return B;
    }

    public static void main(String[] args) {
        List2 list = new List2();
        list.addNode(1);
        list.addNode(2);
        list.addNode(3);
        list.addNode(4);
        list.addNode(5);
        list.addNode(6);
        int c = FindKthToTail(list.head,3).value;
        System.out.println("链表中倒数第3个数是:"+c);
    }
}

相关文章

网友评论

      本文标题:23_链表中倒数第k个节点

      本文链接:https://www.haomeiwen.com/subject/coqnohtx.html