class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(!pHead||!(pHead->next)) return pHead;
stack<ListNode*> s;
ListNode* p=pHead;
while(p->next)//尾节点之前的压栈
{
s.push(p);
p=p->next;
}
pHead=p;
while(s.size())
{
p->next=s.top();
s.pop();
p=p->next;
}
p->next=NULL;
return pHead;
}
};
方法一:利用栈,1.判断链表是否为空或单节点 2.尾节点之前的压栈 3.保存尾节点为头节点 4.出栈形成链表 4在新链表尾部添加NULL
方法二:利用指针:1.创建两个新的指针,*pre=NULL,*next 分别指向当前节点的前一个和后一个。2.尾节点之前,进行反转。最后一个单独反转。
class Solution {
public:
ListNode* ReverseList(ListNode* p) {
if(!p||!(p->next)) return p;
ListNode*pre=NULL;
ListNode* next=p->next;
while(p->next) {
p->next=pre;
pre=p;
p=next;
next=next->next;
}
p->next=pre;
return p;
}
};
1108

被折叠的 条评论
为什么被折叠?



