返回倒数第 k 个节点

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

注意:本题相对原题稍作改动

示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4

说明:
给定的 k 保证是有效的。

没错,我叕用了一种比较暴力(傻)的方法

方法1

int kthToLast(struct ListNode* head, int k)
{
    int length = 0;
    struct ListNode *p = head;
    while (p)
    {
        length++;
        p = p->next;
    }
    int num = length - k + 1;
    for (int i = 1; i < num && head; i++)
    {
        head = head->next;
    }
    if (head)
        return head->val;
    return 0;
}

计算整表长,算出要走的长度,中间几次报错。还是不要用这个了。

方法2

int kthToLast(struct ListNode* head, int k)
{
    struct ListNode* record1 = head;
    struct ListNode* record2 = head;
    while (k--)
    {
        record1 = record1->next;
    }
    while (record1)
    {
        record2 = record2->next;
        record1 = record1->next;
    }
    return record2->val;
}

先让一个指针走k步,再让另一个与这个一起走,先走的那个到终点,后走的那个也到了k。
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值