给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
题目地址:https://leetcode-cn.com/leetbook/read/linked-list/fx61e/
法一
可以按原始顺序迭代结点,将它们逐个移动到列表的头部
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr||head->next==nullptr){
return head;
}
ListNode* dummy=new ListNode(0,head);
ListNode* prev=dummy;
ListNode* cur=head;
ListNode* nex=head->next;
ListNode* temp=head;
while(nex!=nullptr){
temp=prev->next;
prev->next=nex;
cur->next=nex->next;
nex->next=temp;
nex=cur->next;
}
return dummy->next;
}
};
递归方法
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr||head->next==nullptr){
return head;
}
ListNode* newhead;
newhead=reverseList(head->next);
head->next->next=head;
head->next=nullptr;
return newhead;
}
};
递归定义:返回以参数为头节点的链表反转完成后的新的头结点。
递归停止:链表为空或者只有一个结点
具体步骤: