【算法题目】求链表的中间节点

  求链表的中间节点,如果链表中节点总数为奇数,返回中间节点;如果节点为偶数,返回返回中间两个节点的任意一个。

 

  思路:我们可以定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。当走的快的指针走到链表末尾时,走的

  

struct ListNode {
    int val;
    ListNode *next;

};

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

    ListNode* pFast = pHead;
    ListNode* pSlow = pHead;

    while (pFast != NULL && pFast->next != NULL) {
        pFast = pFast->next->next;
        pSlow = pSlow->next;
    }

    return pSlow;
}

 

posted @ 2015-08-02 17:06  vincently  阅读(532)  评论(0编辑  收藏  举报