链表中倒数第k个结点。牛客网

我们用快慢指针的方法,创建两个指针(fast, slow)。我们先让 fast 指针先往后走 k 次,然后在让 fast 和 slow 指针同时往后走,当 fast 指针指向最链表末端也就是 null 的时候,我们的 slow 指针指向的正是倒数第 k 个节点。这是我们只需返回 slow 即可。
具体代码实现如下:

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if (head == null) {
        //如果节点为null,返回null
            return null;
        }
        int size = size(head);
        if (k <= 0 || k > size) {
        //如果 k 小于等于0或者 k 大于链表节点个数则为错误
            return null;
        }
        ListNode fast = head;
        ListNode slow = head;
        for (int i = 0; i < k; i++) {
        //先往后移动 k 个节点
            fast = fast.next;
        }
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
    
    public int size(ListNode head) {
        int size = 0;
        for (ListNode node = head; node != null; node = node.next) {
            size++;
        }
        return size;
    }
}

结果如下图:
在这里插入图片描述

发布了140 篇原创文章 · 获赞 16 · 访问量 8685

猜你喜欢

转载自blog.csdn.net/Huwence/article/details/102094260
今日推荐