如何快速查找到一个单链表的中间位置

无头单向非循环链表

这里我们可以创建两个指针均指向链表的头位置,让两个指针一起向前走,一个一次走一步,一个一次走两步。当走两步的指针到达链表末尾时,另一个指针则到达链表的中间位置

代码如下

SListNode* FindMiddle(SList* plist){
	SListNode* pSlow = plist->_head;
	SListNode* pFast = plist->_head;
	while (pFast){
		if (pFast->_next != NULL){
			pFast = pFast->_next->_next;
		}
		else {
			break;
		}
		pSlow = pSlow->_next;
	}
	return pSlow;
}

记得将函数声明放在我们的头文件中。

你可能感兴趣的:(代码,链表,单链表,查找单链表的中间位置)