解一:
将两个节点逆序非常容易,但是大于两个的时候 就需要考虑:如何在逆序的时候注意死循环:即只有当cur和tmp指的都是当前节点的时候,cur ->next = prev ,就会发生死循环, 而偏偏这个情况很容易发生
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == NULL)
{
return NULL;
}
else if(pHead == NULL)
{
return pHead;
}
ListNode* cur = pHead;
ListNode* prev = NULL;
ListNode* tmp = pHead->next;
while(tmp)
{
prev = cur;
cur = tmp;
tmp = tmp ->next;
cur ->next = prev;
}
pHead->next= NULL;
pHead = cur;
return pHead;
}
};
解二:
使用一个栈来解决问题,C++
/*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 * 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();
p=p->next;
stack1.pop();
}
p->next=NULL;
return newHead;
}
};