資料結構 手撕單鏈表反轉

2021-10-05 03:26:21 字數 842 閱讀 4805

引言:今天面美團上來讓手撕單鏈表反轉,心中暗自竊喜,這麼簡單的演算法,能到今天要起飛了嗎,結果在牛客面試沒給題目介面,讓自己實現單鏈表,頓時心生畏懼,最近一直刷演算法,實現單鏈表這不是鬧呢嗎,哎,結果可想而知,面試官說我基礎不夠紮實,現在咱還是乖乖實現乙個打打基礎吧。

演算法思想

思路其實很簡單,儲存好下乙個節點,避免斷開連線找不到下乙個節點,然後把後乙個解開鏈上前乙個節點,然後把下乙個節點賦給當前節點,當走到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重新...