链表反转
时间复杂度O(n),空间复杂度O(1)。
需要3个指针,t指向上一个节点,tt指向当前节点,当前节点的next改变指向,ttt记录下一个节点
if(head==nullptr || head->next==nullptr) return head; // 链表为空或者只有一个节点
ListNode *t=head,*tt=head->next;
bool sign=true; // 标记第一次改变指向时,尾巴节点的next设为nullptr
while(tt!=nullptr){
ListNode *ttt=tt->next;
tt->next=t;
if(sign){
t->next=nullptr;
sign=false;
}
t=tt;
tt=ttt;
}
return t;