链表反转

时间复杂度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;

全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务