链表中倒数第K个节点

194 阅读1分钟

要求:

输入一个链表,输出该链表中倒数第K个节点。

思路:

链表中倒数第K个节点也就是正数第(L-K+1)个节点。

首先两个节点/指针,一个节点node1先开始跑,指针node1跑到(k-1)个节点后,另一个节点node2开始跑,当node1跑到最后时,node2所指的节点就是倒数第K个节点也就是正数第(L-K+1)个节点。

代码:

public ListNode FindKthToTail(ListNode head, int k) {
    //如果链表为空或者k小于等于0
    if (head == null || k <= 0) {
        return null;
    }
    //声明两个指向头节点的节点
    ListNode node1 = head, node2 = head;
    //记录节点的个数
    int count = 0;
    //记录k值,后面要使用
    int index = k;
    //p指针先跑,并且记录节点数,当Node1节点先跑了k-1个节点后,node2开始跑
    //当node1节点跑到最后的时候,node2节点所指的节点就是倒数第k个节点。
    while (node1 != null) {
        node1 = node1.next;
        count++;
        if (k < 1) {
            node2 = node2.next;
        }
        k--;
    }
    if (count < index) {
        return null;
    }
    return node2;
}