鍊錶反轉可以參考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...