鍊錶反轉 迭代 遞迴實現 學習遞迴心得

2021-10-01 09:16:24 字數 1200 閱讀 6277

鍊錶反轉可以參考blog 鍊錶翻轉的**講解(遞迴和迭代兩種實現)

迭代實現:好懂

node* reverselist(node *head)

return

head

;}

遞迴實現:形式簡單,理解難懂

node * rrreverselist(node* h)

對遞迴的一點理解:

遞迴即在呼叫函式的時候,預設輸入條件下的函式已經得到正確的結果,以上文**為例:剛開始h為head的時候,執行到

node* newhead = rrreverselist(h->next)

; //一直迴圈到鏈尾

預設head->next已經完成翻轉,接下來需要做的就是將head放到合適的位置上面去,**

h->next->next = h;                       //翻轉鍊錶的指向

h->next = null; //記得賦值null,防止鍊錶錯亂

就是在做這個事情。對於為什麼這樣就能實現,可以關注到遞迴出口,可以容易得出。

遞迴最重要的:1.遞迴出口,2.遞迴引數如何傳入,3.應該是在每個遞迴中進行何種操作。

關於遞迴,細緻分析參考blog 遞迴演算法的講解

鍊錶反轉完整**:

#include

using namespace std;

struct node};

node* reverselist(node *head)

return

head;}

//node* rreverselist(node *head)

// p->next=head;

// head->next=null;

// head=q;

// //}

node * rrreverselist(node* h)

int main()

p=head;

while(p!=null)

cout

; while(p!=null)

}

php 實現鍊錶的反轉 迭代和遞迴

1.遞迴 思路說明請看 注釋 definition for a singly linked list.class listnode class solution 由於是物件,所以存在值引用 即 head的變化會影響到 tmp tmp this reverselist head next 1 2 3 ...

反轉鍊錶 遞迴和非遞迴實現

include stdafx.h include include struct node void createlink node head,int data void printlink node head void reverselink node head node reverselink n...

反轉鍊錶 遞迴與非遞迴實現

一 迭代實現 思路 通過每次遍歷,修改當前結點與上一結點指向,遍歷到最後乙個結點,鍊錶也就實現了反轉 首先我們定義三個指標,分別指向當前節點cur 前一結點pre 下一節點next,並且pre和next為null 起始狀態為 第一次 執行 next cur next cur next pre pre...