一共有两种方法:
方法一:不用新建结点保存当前结点的下一个结点。因为头结点一直没怎么利用,所以直接将头结点的指针指向当前结点的下一个结点。非常节省空间
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; }
链表的反转最主要的要点就是,在将下一个指针指向前一个节点的之前,需要将下一个指针指向的下一个结点进行保存起来。不然链表会断开,就不能往下进行了。