题目地址(22. 链表中倒数第k个节点)

https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/

题目描述

  1. 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
  2. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 123456。这个链表的倒数第 3 个节点是值为 4 的节点。
  3. 示例:
  4. 给定一个链表: 1->2->3->4->5, k = 2.
  5. 返回链表 4->5.

前置知识


公司

  • 暂无

思路

双指针快指针先走k步 然后再一起走k步

关键点


代码

  • 语言支持:Java

Java Code:

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode getKthFromEnd(ListNode head, int k) {
  11. ListNode pre = head;
  12. ListNode after = head;
  13. while(k-- > 0){
  14. after = after.next;
  15. }
  16. while(after != null){
  17. after = after.next;
  18. pre = pre.next;
  19. }
  20. return pre;
  21. }
  22. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:剑指 Offer 22. 链表中倒数第k个节点 - 图1#card=math&code=O%28n%29&id=oR9xe)
  • 空间复杂度:剑指 Offer 22. 链表中倒数第k个节点 - 图2#card=math&code=O%28n%29&id=crG3S)