單鏈表反轉有遞迴和非遞迴兩種實現方法,
首先定義鍊錶結點:
//定義乙個鍊錶節點
struct listnode
;
一、遞迴方法先反轉後面的鍊錶,從最後面的兩個結點開始反轉,依次向前,將後乙個鍊錶結點指向前乙個結點,注意每次反轉後要將原煉表中前乙個結點的指標域置空,表示將原煉表中前乙個結點指向後乙個結點的指向關係斷開。
二、非遞迴方法
利用兩個結點指標和乙個中間結點指標temp(用來記錄當前結點的下乙個節點的位置),分別指向當前結點和前乙個結點,每次迴圈讓當前結點的指標域指向前乙個結點即可,翻轉結束後,記得將最後乙個節點的鏈域置為空。
整體測試程式:
#includeusing namespace std;
//定義乙個鍊錶節點
struct listnode
;//插入乙個新節點到鍊錶中(放在鍊錶頭部)
void createlist(listnode * & head, int data)
p->next = head;
head = p;
}void printlist(listnode* head)
cout << endl;
}//遞迴方式:實現單鏈表反轉
listnode * reverselist(listnode * head)
}//非遞迴方式:實現單鏈表反轉
listnode* reverselist2(listnode* head)
head->next = null; //while結束後,將翻轉後的最後乙個節點(即翻轉前的第乙個結點head)的鏈域置為null
單鏈表的反轉非遞迴演算法
定義單鏈表的結點 typedef struct listnodelistnode 我們採用的單鏈表是帶頭結點的。需要遍歷一遍鍊錶,在遍歷過程中,把遍歷的節點一次插入到頭部。在這個過程之後,第乙個節點成了最後節點,因此要特殊處理,改其後繼為null。void inversion listnode he...
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 cpp view plain copy typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟...
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟2 其中注意,鍊錶是以節點後繼為null...