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

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

解1

  1. 获取链表个数
  2. 循环到(总个数减k)个结点,输出
class Solution {
public:
    int kthToLast(ListNode* head, int k) {
        int nCount = 0;
        int i;
        ListNode* pTemp = head;
        while(pTemp)
        {
            nCount++;
            pTemp = pTemp->next;
        }
        for(i=0 ; i<nCount-k ; i++)
        {
            head = head->next;
        }
        return (head->val);
    }
};

解2:
快慢指针,前指针(pFront)从head开始,后指针(pEnd)和前指针相差k位;两个指针一起循环向后移动,当pEnd指向NULL时,pFront即指向链表的倒数第k个元素。

class Solution {
public:
    int kthToLast(ListNode* head, int k) 
    {
        ListNode* pFront = head;
        ListNode* pEnd = head;
        int i;
        for(i=0 ; i<k ; i++)
        {
            pEnd = pEnd->next;
        }
        while(pEnd != NULL)
        {
            pEnd = pEnd->next;
            pFront = pFront->next;
        }
        return (pFront->val);
    }
};

解3 递归算法
首先,设置两个全局变量,val:用于存储返回的数值,nCount:计数递归返回的次数,初始为k;
其次,从头开始,先递归结点到结尾,然后开始返回。
返回一个,nCount–,当nCount等于-1时,即返回到了第k个结点,将该节点的值赋值给val,最后返回value即可。

class Solution {
public:
    int val = 0;
    int nCount = 0;
    int kthToLast(ListNode* head, int k) 
    {
        nCount = k;
        if(head != NULL)
            kthToLast(head->next , k);
        nCount--;
        if(-1 == nCount && 0 == val)
        {
            val = head->val;
        }
        return val;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值