[1] 查找单链表的中间节点
不确定的话,可以举例子进行验证。
如果是偶数个节点,中间节点会有偏差。
struct ListNode
{
int m_nVal;
ListNode* m_pNext;
ListNode(int nVal) :m_nVal(nVal), m_pNext(nullptr) {}
};
ListNode* FindMiddleNode(ListNode* pHead)
{
if (pHead == nullptr || pHead->m_pNext == nullptr)
return nullptr;
//定义两个节点
ListNode* pNode1 = pHead;
ListNode* pNode2 = pHead;
do
{
pNode1 = pNode1->m_pNext;
pNode2 = pNode2->m_pNext->m_pNext;
} while (pNode1 != nullptr && pNode2 != nullptr && pNode2->m_pNext !=nullptr);
return pNode1;
}