題目描述
輸入一個鏈表,反轉鏈表後,輸出鏈表的所有元素。
非遞歸的方式:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//pHead本身爲空,直接返回NULL
if(pHead==NULL)
{
return NULL;
}
//pHead鏈表只有一個節點,直接返回pHead
if(pHead->next==NULL)
{
return pHead;
}
//需要注意指針的變化,不能使鏈表斷開
ListNode *p=pHead;
ListNode *pPrev=NULL;
ListNode *pNext=NULL;
while(p!=NULL)
{
pNext=p->next;
p->next=pPrev;
if(pNext==NULL)
return p;
pPrev=p;
p=pNext;
}
return p;
}
};
遞歸實現:
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//pHead本身爲空,直接返回NULL
//pHead鏈表只有一個節點,直接返回pHead
if(pHead==NULL||pHead->next==NULL)
{
return pHead;
}
else
{
//遞歸實現
ListNode *res=ReverseList(pHead->next);
pHead->next->next=pHead;
pHead->next=NULL;
return res;
}
}
};