深刻理解——反转链表

一共有两种方法:
 
方法一:不用新建结点保存当前结点的下一个结点。因为头结点一直没怎么利用,所以直接将头结点的指针指向当前结点的下一个结点。非常节省空间

      ListNode *buf=head;
        ListNode *pre=buf;
          while(head->next!=NULL){
            buf=head->next;
            head->next=buf->next;
            buf->next=pre;            
            pre=buf;
        }

  方法二:新建结点进行保存当前结点的下一个结点。

 ListNode* cur = head;
        ListNode* pre = nullptr;
        ListNode* newhead = nullptr;
         ListNode* pnext ;
        while(cur != nullptr){
           pnext = cur->next;
            if(pnext == nullptr){
                newhead = cur;
            }
            cur->next = pre;
            pre = cur;
            cur = pnext;
          
        }

  

链表的反转最主要的要点就是,在将下一个指针指向前一个节点的之前,需要将下一个指针指向的下一个结点进行保存起来。不然链表会断开,就不能往下进行了。

猜你喜欢

转载自www.cnblogs.com/leyang2019/p/10542295.html