获取链表中倒数第K个结点

输入一个链表,输出该链表中倒数第k个结点(来自牛客网)

解题思路:可以借助快慢指针的思想,定义两个指针,把两个指针都放在头结点的位置,让快指针先走k步停下来,然后接下来,让两个指针同时从他们的当前位置(此时,慢指针在头结点的位置,快指针在距头结点K步的位置),一步步向后走,当快指针走完的时候,此时,慢指针刚好指向链表中倒数第K个结点。(记得考虑特殊情况噢!)

根据这个思路,就知道如何写代码了,嘻嘻
定义一个链表的结构体:

struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        ListNode*fast=pListHead;
        ListNode*low=pListHead;
        if(pListHead==NULL||k==0)
        {
            return NULL;
        }
        while(k--)
          {
            if(fast)
            fast=fast->next;
            else
                return NULL;
            }
        while(fast)
        {
            fast=fast->next;
            low=low->next;
        }
        return low;
    }

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值