返回链表的倒数第k个节点

17 篇文章 1 订阅

 /*思路不难:

1、当head == null时,链表为空,不存在倒数第k个节点,返回null

2、首先先解决k不满足时的情况:

①:当k<=0,在链表中找不到倒数第k的位置,返回null

②:或者k>链表长度时,超出链表长度,找不到倒数第k个节点,返回null

在②这一步之前,先定义一个cur指向head,cnt = 0;cur从头遍历到链表为null为止,算出链表的长度cnt

3、定义两个fast slow两个节点,同时指向head节点

第①步:先让fast先走 k-1 步

第②步:这是一个比较巧妙的过程,slow指向head不走,fast先走 k-1 步;然后fast和slow同时向前走,当fast.next ==null时,此时的slow位置就是倒数第k位置了,

*/

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 *输入一个链表,输出该链表中倒数第k个结点。
 * 如果该链表长度小于k,请返回空。
 * 示例1
 * 输入
 * {1,2,3,4,5},1
 * 返回值
 * {5}
 * @User:Mingaho
 * @Date:2021/04/29
 * @Time:10:52
 */
class Node {
    public int val;
    public Node next;

    public Node(int val) {
        this.val = val;
    }
}
public class Main14 {
    public Node FindKthToTail (Node head, int k) {
        if(head == null) {
            return null;
        }
        int cnt = 0;
        Node cur = head;
        while(cur != null) {
            cnt++;
            cur = cur.next;
        }
        if(k <= 0 || k > cnt) {
            return null;
        }
        Node fast = head;
        Node slow = head;
        while (k - 1 > 0) {
            fast = fast.next;
            k--;
        }
        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值