leetcode-链表的中倒数第k个节点-12

链表的中倒数第k个节点

题目要求
  输入一个链表,输出该链表中倒数第k个结点。
示例1:
输入:1,[1,2,3,4,5]
输出:[5]
思路
  如果这是一个空链表或者倒数的节点小于等于0,那么返回值应该为空。然后,我们设置fast和slow两个指针,为了使两个指针之间的距离为k-1,我们先将a结点找到对应位置,如果还没找到a的位置链表就结束了,那么返回空,然后只要判断a->next != NULL,也就是a不是最后一个结点,那么a向前一步,b向前一步,直到a为最后一个结点。
图解
在这里插入图片描述
代码实现

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) {
	struct ListNode* fast = pListHead;
	struct ListNode* slow = pListHead;

	if (pListHead == NULL || k <= 0)
	{
		return NULL;
	}

	while (k > 1)
	{
		if (fast->next == NULL)
		{
			return NULL;
		}
		fast = fast->next;
		k--;
	}

	while (fast->next != NULL)
	{
		fast = fast->next;
		slow = slow->next;
	}
	return slow;
}

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/113396946