题解 | #链表中倒数第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;
    }
};

全部评论

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务