剑指offer--面试题15--相关

感受:清晰的思路是最重要的!!!

题目:求链表中间节点

ListNode* MidNodeInList(ListNode* pHead)
{
    if(pHead == NULL)
        return NULL;

    ListNode* pNode1 = pHead;
    ListNode* pNode2 = pHead;

    unsigned int step = 1;
    while(pNode2->m_pNext != NULL)
    {
        pNode2 = pNode2->m_pNext;
        step++;
        if((step & 0x1) == 1)
            pNode2 = pNode2->m_pNext;
    }

    return pNode2;
}

依然两个指针进行一次遍历即可。。。:一个向前走两步,另一个向前走一步

针对链表问题,若一个指针的遍历无法解决问题,则可以尝试用两个指针解决,基本规则为:让其中一个指针遍历的快些,或者先向前运动k步

清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
原文地址:https://www.cnblogs.com/hello-yz/p/3252655.html