1. 程式人生 > >【Java】實現一個演算法,找出一個單鏈表中倒數第K個結點

【Java】實現一個演算法,找出一個單鏈表中倒數第K個結點

用迭代法,使用兩個指標P1和P2,分別指向連結串列中相聚K個結點的兩個結點。

P1,p2均指向頭加點,然後將P2向前移動K個結點。之後,以相同的速度移動這兩個指標,那麼p2會在length-K步後到達尾結點,這時p1就剛好在第length-K個結點也就是倒數第K個結點的位置上。

LinkListNode nthToLast(LinkListNode head, int k)
{
	if( k<0 ) return null;
	LinkListNode p1 = head;
	LinkListNode p2 = head;
	//先將P2向前移動k個結點
	for(i = 0; i < k; i++)
	{
		if (NULL == p2) return NULL;
		else p2 = p2->next;
	}
	if (NULL == P2) return NULL;
	
	//接著以同樣的速度移動p1和p2,當p2抵達連結串列末尾時,p1指向第K個結點
	while(p2->next != NULL)
	{
		p1 = p1->next;
		p2 = p2->next;
	}
	return p1;
}