前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetCode160|链表中倒数第k个节点

leetCode160|链表中倒数第k个节点

作者头像
码农王同学
发布2021-01-15 11:00:21
2080
发布2021-01-15 11:00:21
举报
文章被收录于专栏:后端Coder后端Coder

一,链表中倒数第k个节点

1,问题简述

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

2,示例描述

代码语言:javascript
复制
示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.

返回链表 4->5.

3,题解思路

使用快慢指针即可解决

4,题解程序

代码语言:javascript
复制

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class GetKthFromEndTest {
    public static void main(String[] args) {
        ListNode l1 = new ListNode(1);
        ListNode l2 = new ListNode(2);
        ListNode l3 = new ListNode(3);
        ListNode l4 = new ListNode(4);
        ListNode l5 = new ListNode(5);
        l1.next = l2;
        l2.next = l3;
        l3.next = l4;
        l4.next = l5;
        int k = 2;
        ListNode listNode = getKthFromEnd(l1, k);
        System.out.println("listNode = " + listNode);


    }

    public static ListNode getKthFromEnd(ListNode head, int k) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode slow = head;
        ListNode fast = head;
        for (int i = 0; i < k; i++) {
            fast = fast.next;
        }
        while (fast != null) {
            slow = slow.next;
            fast = fast.next;
        }
        return slow;
    }


}

5,总结一下

对于本题,我们可以快慢指针快速得到解决,快指针先走k,然后快慢指针一起走,当快指针为null时,此时的慢指针就是倒数第k的节点,返回即可

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,链表中倒数第k个节点
    • 1,问题简述
      • 2,示例描述
        • 3,题解思路
          • 4,题解程序
            • 5,总结一下
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档