我是先做的92题,这回过头来做,自然很容易就解答出来。反转的循环有四步,只要缕清这四步就没问题。注意加上链表为空的情况即可。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr)
return head;
ListNode *nhead=head;
ListNode *temp=head;
head=head->next;
temp->next=nullptr;
while(head!=nullptr)
{
temp=head;
head=head->next;
temp->next=nhead;
nhead=temp;
}
return nhead;
}
};
瞟了一眼答案,好像没那么多行,思考了一下,改进了下代码;
ListNode* reverseList(ListNode* head) {
//先写出循环体内的部分再思考初始变量
//如此一改,判空的部分也省了
ListNode *nhead=nullptr;
ListNode *temp=head;
while(head!=nullptr)
{
head=head->next;
temp->next=nhead;
nhead=temp;
temp=head;
}
return nhead;
}
真是个大笨蛋。思路想是想到了,就是没想到,要把尾结点置位0
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr||head->next==nullptr)
return head;
ListNode *nhead=head;
nhead=reverseList(head->next);
head->next->next=head;
head->next=nullptr;//思路都是对的,就是这句没想到,哎哎
return nhead;
}
};