找出链表的倒数第K个结点

给出一个链表如下图:


要求:删除倒数第K个结点

分析如下:

1.我们可以先遍历一遍链表,求出链表的长度,然后从头结点开始向后走(len-K)步,但是此方法需要遍历两遍链表

2.利用快慢指针法,快指针先走K步,然后快指针和慢指针同时向后走,当快指针为空时,慢指针所指的位置就是所要找的位置。

代码如下:

Node* List::find_Penultimate_K(Node* Head,int k)
{
	if(Head==NULL)//处理空链表
		return NULL;
	Node* fast=Head;
	Node* slow=Head;
	while(k--)
	{
		if(fast==NULL)//判断K是否超过链表长度
		{
			return NULL;
		}
		fast=fast->_next ;
	}

	while(fast)
	{
		fast=fast->_next ;
		slow=slow->_next;
	}
	return slow;

}


运行结果:



猜你喜欢

转载自blog.csdn.net/wodeqingtian1234/article/details/75175122