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

链表中倒数第k个结点

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

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
		if (!pListHead||k<=0) {
			return nullptr;
		}
		auto slow=pListHead;
		auto fast =pListHead;

		while (k--) {
			if (fast) {
				fast=fast->next;
			}else {
				return nullptr;
			}
		}

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

		return slow;
	}


};

思路

首先想到的是,通过一次遍历判断链表结点数目,再用n-k得到应该向后经过几个指针

考虑时间复杂度的问题,采用快慢指针法,两个指针同时进行,考虑依据是:倒数第k个节点离最后位置有k个节点差距,只要让两个指针先保持k个节点差距再经过平移,使较为靠后的指针平移到末尾位置,此时就得到指向倒数第k个节点的指针

细节

  1. 在链表中,指针的定义要注意类型,可以使用auto
  2. 指针的使用语法
  3. 链表有很多需要判断的(节点数量因为一开始不可知,需要在遍历过程中及时判断下一个节点是否为空指针

全部评论

相关推荐

独特的菜鸡想要off...:今天被同一个hr捞了,姐姐你招我进去的你不记得吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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