宝安做棋牌网站建设有哪些公司,涿州网站网站建设,网站icon怎么做的,滕州盛扬网络公司网站建设推广题目链接#xff1a;https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/
1. 题目介绍#xff08;22. 链表中倒数第k个节点#xff09; 输入一个链表#xff0c;输出该链表中倒数第k个节点。为了符合大多数人的习惯#xff0c;本题从1开始计数https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/
1. 题目介绍22. 链表中倒数第k个节点 输入一个链表输出该链表中倒数第k个节点。为了符合大多数人的习惯本题从1开始计数即链表的尾节点是倒数第1个节点。 例如一个链表有 6 个节点从头节点开始它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。 【测试用例】 示例 给定一个链表: 1-2-3-4-5, 和 k 2. 返回链表 4-5. 2. 题解
2.1 快慢指针 – O(n)
时间复杂度O(n)空间复杂度O(1)
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/
class Solution {public ListNode getKthFromEnd(ListNode head, int k) {// 错误输入判断if (head null || k 0) return null;// 定义快慢指针ListNode quick head;ListNode slow head;// 调整快指针到指定位置for (int i 0; i k-1; i){// 说明链表长度小于k出现错误不满足题目要求if (quick null) return null;quick quick.next;}// 开始移动快慢指针while (quick.next ! null){quick quick.next;slow slow.next;}return slow; }
}3. 相关题目 求链表的中间节点。如果链表中的节点总数为奇数则返回中间节点如果节点总数是偶数则返回中间两个节点的任意一个。为了解决这个问题我们也可以定义两个指针同时从链表的头节点出发一个指针一次走一步另一个指针一次走两步。当走得快的指针走到链表的末尾时走得慢的指针正好在链表的中间。 举一反三 当我们用一个指针遍历链表不能解决问题的时候可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些比如一次在链表上走两步或者让它现在链表上走若干步。 4. 参考资料
[1] 面试题22. 链表中倒数第 k 个节点双指针清晰图解-- 2.1图片来源