interview
work
jobc++
經典演算法題目 : 反轉單鏈表 reverse list
對於乙個普通的單鏈表,可以定義成結構體形式:
// 定義鍊錶節點
struct
listnode
請寫乙個函式實現單鏈表的翻轉
題目解析
一般來說,單鏈表的反轉有遞迴和非遞迴的方式來進行實現, 此處的反轉實現 參考反轉鍊錶圖示 其中遞迴方式的實現比較難以理解, 進攻參考
遞迴方式
// 遞迴方式
listnode * reverselist_re
(listnode * head)
非遞迴方式
// ref:[鍊錶反轉**講解](
// 非遞迴方式
listnode * reverselist
(listnode *head)
// 返回新的節點值
return new_head;
}// 不返回操作 非遞迴 反轉鍊錶
void
reverselist2
(listnode * &head)
// 復用 head 指標
head = new_head;
}附加內容
測試工程 實現
// 鍊錶操作類的 測試
#include
using
namespace
std;
// 定義鍊錶節點 值和指標
struct
listnode
;// 定義鍊錶的 增 刪 查 改
// crud
// 建立鍊錶 // 根據首指標 建立首指標節點
void
createhead
(listnode *head, int data)
// 在鍊錶尾頭部新增新節點
void
addnode
(listnode * & head,int data)
// 指向新節點 返回新節點
p->next = head;
head = p;
}// 刪除節點
// 查詢節點
// 更新節點值
// 列印list 所有節點值
void
printlist
(listnode *head)
cout
<<"null"
<}// 反轉鍊錶
// ref:[鍊錶反轉**講解](
// 非遞迴方式
listnode * reverselist
(listnode *head)
// 返回新的節點值
return new_head;
}// 不返回操作 非遞迴 反轉鍊錶
void
reverselist2
(listnode * &head)
// 復用 head 指標
head = new_head;
}// 遞迴方式
listnode * reverselist_re
(listnode * head)
// 主函式 測試 demo
#define length 20
intmain
(void)
鍊錶反轉 58面試「留念」
題目 輸入乙個鍊錶的頭結點,反轉該鍊錶,並返回反轉後鍊錶的頭結點。鍊錶結點定義如下 struct listnode 分析 這是一道廣為流傳的微軟面試題。由於這道題能夠很好的反應出程式設計師思維是否嚴密,在微軟之後已經有很多公司在面試時採用了這道題。為了正確地反轉乙個鍊錶,需要調整指標的指向。與指標操...
面試題 反轉鍊錶
定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。鍊錶節點定義如下 struct listnode int m nkey listnode m pnext 思路 額,一路遍歷下去,前後指向反過來,最後乙個節點就輸出。o n 的效率也應該是最優的了。答案如下 listnode r...
面試題 反轉鍊錶
面試題 反轉鍊錶 思路 要實現鍊錶反轉,需要調整鍊錶中指標方向,使鍊錶反轉後的頭結點為原鍊錶的尾結點。為了防止結點斷裂,需定義三個指標,分別指向當前遍歷的結點,它的前一結點以及後乙個結點。當然編寫 時要考慮到下列三點 防止程式崩潰 將思路用 實現為 slistnode node phead 當前結點...