题解 | #链表中倒数第k个结点#

链表中倒数第k个结点

https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a

快慢指针可以做到一次遍历,需要返回倒数第k个节点,我们可以看做当快指针now指向链表末尾的nullptr时,慢指针bef正好指向倒数第k个节点,所以需要一开始先让快指针now移动k个节点。

为了方便处理,设置一个dummyhead作为伪头节点,bef和now都从dummyhead出发。

因为样例中存在k越界的情况,针对这部分需要加入条件额外判断。

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
		if (!pListHead) return nullptr;
		if (k <= 0) return nullptr;
		ListNode* dummyhead = new ListNode(0);
		dummyhead->next = pListHead;
		ListNode* bef = dummyhead, *now = bef;
		for (int i = 0; i < k && now; i++) {
			now = now->next;
		}
		while (now) {
			now = now->next;
			bef = bef->next;
		}
		return bef == dummyhead? nullptr: bef;
    }
};

全部评论

相关推荐

在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务