引言:今天面美團上來讓手撕單鏈表反轉,心中暗自竊喜,這麼簡單的演算法,能到今天要起飛了嗎,結果在牛客面試沒給題目介面,讓自己實現單鏈表,頓時心生畏懼,最近一直刷演算法,實現單鏈表這不是鬧呢嗎,哎,結果可想而知,面試官說我基礎不夠紮實,現在咱還是乖乖實現乙個打打基礎吧。
演算法思想:
思路其實很簡單,儲存好下乙個節點,避免斷開連線找不到下乙個節點,然後把後乙個解開鏈上前乙個節點,然後把下乙個節點賦給當前節點,當走到nullptr的時候,把前乙個節點賦給當前節點,當前節點即為反轉後的新頭節點。
**:
#include
#include
using
namespace std;
typedef
struct node
}node;
node*
revesrse
(node* head)
cur = prev;
return cur;
}int
main()
cout << endl;
n0 =
revesrse
(n0)
; node* p2 = n0;
while
(p2)
system
("pause");
return0;
}
執行結果如圖:
資料結構 單鏈表反轉
鍊錶反轉一般有兩種解法 遞迴和迭代。首先給出鍊錶的定義 typedef struct taglnode linklist 假設鍊錶為head 1 2 3 4 5 null。linklist reverse linklist head 一開始我的想法是,先遞迴到最後一層,也就是reverse 5 這層...
資料結構之單鏈表反轉
單鏈表反轉的非遞迴方法 首先是結點的定義 public class node 使用非遞迴方法反轉單鏈表,需要設定兩個node型別的物件pre和nex,pre用來記錄head的前乙個結點,nex用來記錄head的後乙個結點,然後講head結點後移。public node reversecur node...
資料結構 單鏈表實現反轉
如果鍊錶只有乙個或者沒有節點,則無需反轉 原鍊錶的第乙個節點即為反轉後的最後乙個元素,需要將其固定,我們叫它final 按原鍊錶的順序從第二個開始對所有節點node進行遍歷,每次將final的next重新指向node的next,將node的next重新指向head的next,將head的next重新...