チェーンテーブル反転(C++版)


タイトル:
チェーンテーブルの反転アルゴリズムを実現し,アルゴリズムのロバスト性に注意する.
注意:
チェーンテーブルノードの定義は次のとおりです.
struct ListNode { int val; struct ListNode *next; ListNode(int x) :val(x), next(NULL) {} };  
直接コード:
ListNode* ReverseList(ListNode* pHead) 
    {
        //                      。
		if(pHead == NULL || pHead->next == NULL)
		{
            return pHead;
        }
        
        //     3       
        // p         
        // q               
        // r             
        
        ListNode *p = pHead, *q = pHead->next, *r = pHead;
        p->next = NULL;
        p = q;
        
        while(p)
		{
            q = p->next;		//              
            p->next = r;		//         
            r = p;				//             
            p = q;				//         
        }
        
        return r;
    }