遞迴反轉鍊錶
先上**,然後一步步分析。
1 listnode* reverselist(listnode*head)1.我們先考慮兩個結點。
剛進入遞迴函式時(此時是第一層遞迴),走到 listnode *newhead=reverselist(head->next)**處,head->next(圖中編號為2的結點)作為頭結點進入下一層遞迴迴圈(第二層遞迴),注意:head結點在這一層迴圈中(第二層遞迴)是二號結點,執行**,判斷遞迴條件,二號結點的下乙個結點為空所以第二層遞迴函式返回,newhead等於返回的二號結點。此時函式返回到第一層遞迴中,繼續向下執行**。由於遞迴返回此時head結點是二號結點。
執行head->next->next=head2.分析多個結點情況如此,遞迴函式先遞迴進行到最後乙個結點,然後逐層遞迴返回。並修改指向的指標。**後,因為head->next指標是二號結點,二號結點的next指標指向了head。
然後head->next=null。然後鍊錶反轉成功返回newhead,將尾結點作為新的頭結點。
注意:執行遞迴時候不要跳進遞迴(每層遞迴入棧不易理解),而是根據函式的定義來弄清楚函式執行後產生什麼結果。reverselist(head->next)
執行完成後,整個鍊錶就成了這樣:
然後執行head->next->next=head 和head->next=nulll 下面兩個**反轉鍊錶。
遞迴(鍊錶反轉)
將乙個單鏈表反轉,結果得到的是鍊錶的最後乙個,以及第乙個。確實是反轉了,但是只剩下兩個元素了。public static node reversenode node node node newheadnode reversenode node.getnext node.setnext null ne...
遞迴控制 鍊錶反轉
1.反轉思路 2.j a 實現 鍊錶反轉的意思是將1 2 3 4 5 null反轉為5 4 3 2 1 null 反轉鍊錶的遞迴思路如下 假設2345這一段鍊錶能夠反轉成功,則只需將1 2345的指標改為2345 1,然後1 null即可 以此類推,即可求得反轉鍊錶 2.1 結點和建立鍊錶的實現 結...
反轉鍊錶(非遞迴,哨兵,遞迴)
給你單鏈表的頭節點 head 和兩個整數 left 和 right 其中 left right 請你反轉從位置 left 到位置 right 的鍊錶節點,返回 反轉後的鍊錶 非遞迴解法 反轉cur.next cur.next pre pre cur cur next next cur.next 新建...