剑指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步

posted on 2013-08-12 12:04  -赶鸭子上架-  阅读(152)  评论(0编辑  收藏  举报