三种方法:
第一种:采用栈,
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead==NULL)
{
return pHead;
}
ListNode * p=pHead;
ListNode * newHead;
stack<ListNode *> stack1;
while(p->next!=NULL)
{
stack1.push(p);
p=p->next;
}
newHead = p;
while(!stack1.empty())
{
p->next=stack1.top();
stack1.pop();
p=p->next;
}
p->next=NULL;
return newHead;
}
};
第二种方法:递归
if(pHead == NULL || pHead->next == NULL) {
return pHead;
}
ListNode* preNode = ReverseList(pHead->next);
pHead->next->next = pHead;
pHead->next = NULL;
return preNode;
第三种:循环
ListNode* pre = NULL;
ListNode* next = NULL;
while (pHead != NULL) {
next = pHead->next;
pHead->next = pre;
pre = pHead;
pHead= next;
}
return pre;