两种方法:
a -> b -> c -> NULL
方法一:
判断当前节点的下一个节点是否为空
否:
保存下一个节点
将当前节点的下一个节点指向上一个节点
上一个节点和当前节点分别指向当前节点和当前节点的下一个节点
是:
将当前节点的下一个节点指向上一个节点
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode* root = pHead; ListNode* pre = NULL; ListNode* next = NULL; if(pHead == NULL) return NULL; while(root->next){ next = root->next; root->next = pre; pre = root; root = next; } root->next = pre; return root; } };方法二:
判断当前节点是否为空
否:
保存当前节点的下一个节点
判断是否为空
是:返回该链表
当前节点的下一个节点变为前一个节点
上一个节点和当前节点分别指向当前节点和当前节点的下一个节点
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode* pRes = NULL; ListNode* pNode = pHead; ListNode* pPrev = NULL; while(pNode != NULL) { ListNode* pNext = pNode->next; if(pNext == NULL) pRes = pNode; pNode->next= pPrev; pPrev = pNode; pNode = pNext; } return pReversedHead; } };