思路:
1.若链表结点个数为0或1,不需反转直接返回head。
2.假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。
定义pre指针初始为空,是cur指针要反指的下一个结点,cur为当前结点,nex记录cur的下一个结点。
遍历链表,直至cur为空,返回pre也就是新的头结点。
在遍历链表时,将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head||!head->next) return head;//结点个数为0或1不需反转直接返回
ListNode*pre=nullptr,*cur=head;
while(cur){
ListNode*nex=cur->next;
cur->next=pre;pre=cur;cur=nex;
}
return pre;
}
};