链表中倒数第k个结点_14

题目描述

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

public class FindKthToTail_14 {
    //双指针
    public static ListNode_14 FindKthToTail1(ListNode_14 head,int k) {
        ListNode_14 p1, p2;
        p1 = p2 = head;
        int i = 0;
        for (; p1 != null; i++) {
            //从第k步开始,第二个指针也从头指针开始遍历,两个指针距离始终保持在k-1
            //当第一个指针到达链表的尾结点时吗,第二个指针正好是倒数第k个节点
            if (i >= k)
                p2 = p2.next;
            p1 = p1.next;
        }
        return i < k ? null : p2;
    }
    public static ListNode_14 FindKthToTail(ListNode_14 head,int k) {
        int totalNum = 0;
        if(head != null){
            totalNum++;
        }else{
            return null;
        }
        // 计算总的节点数量
        ListNode_14 currentNode = head.next;
        while(currentNode != null){
            totalNum++;
            currentNode = currentNode.next;
        }

        if(totalNum < k){
            //throw new RuntimeException("k的值超过了链表长度");
            return null;
        }
        // 倒数第k个为正数第totalNum-k+1个
        ListNode_14 resultNode = head;
        for(int i=1; i<=totalNum-k; i++){
            resultNode = resultNode.next;
        }
        return resultNode;

    }
    public static void main(String[] args) {
        ListNode_14 root = new ListNode_14(1);
        root.next = new ListNode_14(2);
        root.next.next = new ListNode_14(3);
        root.next.next.next = new ListNode_14(4);
        root.next.next.next.next = new ListNode_14(5);
        ListNode_14 result = FindKthToTail1(root,2);
        System.out.println(result.val);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章