链表反转

思路:
使用三个指针:p,pre,next,p指向当前需要更改的节点,pre指向这个节点的前一个节点,next指向这个节点的后一个节点。重点是更改指针的顺序,更新链首指针。

/*
只需要完成逆置链表函数
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};
*/

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
		if(pHead==NULL||pHead->next==NULL)
            return pHead;
        ListNode* pre=pHead;
        ListNode* p=pre->next;
        ListNode* next=pre->next->next;

        while(pre->next!=NULL){
            pre->next=p->next;
            p->next=pHead;
            pHead=p;
            p=next;
            next=next->next;          
            
        
        }
        return pHead;
        
    }
};
原文地址:https://www.cnblogs.com/sandy-t/p/7459300.html