使用的链表相关定义及函数在:链表最小结构(C++版本)
实现原理:
使用两个指针pFrontNode、pBackNode,它们都指向头节点。
每次让pFrontNode向前走2步,pBackNode向前走1步。
直到pFrontNode走到最后一个节点停止,pBackNode所指的即为中间节点。
实现代码:
ListNode* GetMiddleNodeFromTail(const MyList& myList)
{
if (nullptr == myList.pHead) return nullptr;
ListNode* pFrontNode = myList.pHead;
ListNode* pBackNode = myList.pHead;
while (pFrontNode->pNext != nullptr)
{
if (pFrontNode->pNext != nullptr) pFrontNode = pFrontNode->pNext;
if (pFrontNode->pNext != nullptr) pFrontNode = pFrontNode->pNext;
pBackNode = pBackNode->pNext;
}
return pBackNode;
}