深刻理解——反转链表
一共有两种方法:
方法一:不用新建结点保存当前结点的下一个结点。因为头结点一直没怎么利用,所以直接将头结点的指针指向当前结点的下一个结点。非常节省空间
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;
}

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

浙公网安备 33010602011771号