劍指offer 面試題5

2022-08-18 10:15:15 字數 2021 閱讀 9321

到現在為止,看過的書+**有一定量了,並且也參加了個比賽,給自己的總體感覺:程式設計需要的是靈活的頭腦,書裡的東西只是講個規則、思想,其實際實現可以千差萬別!   潛在的規則+靈活的思維 = 程式!

在做面試題5時,發現utilities資料夾下的內容太好了,基本上是那些資料結構的實現:鍊錶、二叉樹、樹等(缺個圖),準備通過學習這些**來深入理解各個資料結構及其介面/成員函式。

拿該題來說,解決單鏈表!!!

題目:逆序列印單鏈表

一、自己寫單鏈錶類及其操作

花了一下午時間,無語了。。。

1、list.h

//

單鏈表資料結構及基本操作

//最大節點數

const

int maxlength = 50;//

節點struct

listnode;//

list類

class

list

;

2、list.cpp

//

list.cpp

#include

"list.h

"#include

list::list()

list::~list()

//1. 建立節點

listnode* list::createlistnode(int

value)

//2. 建立鍊錶或者將節點加到鏈尾

void list::createfrontoraddtotail(listnode** phead, int

value)

}

//3. 在第i個節點之前插入新的節點

void list::listinsert(listnode* phead, int i, int

value)

if(i == 0

)

else

cout

<<"

failed!

"<}

//4. 刪除value=e的第乙個節點

bool list::removelistnode(listnode** phead,int

value)

else

}if(ptobedeleted !=null)

return

false;}

//5. 查詢第乙個value=e的節點,返回其位置

int list::findlistnode(listnode* phead,int

value)

if(pnode != null && pnode->m_value ==value)

return

i;

else

return0;

}

//6. 銷毀鍊錶

void list::destorylist(listnode*phead)

}

//7. 鍊錶元素個數

int list::listlength(listnode*phead)

return

i;}

未測試過。。。因為想繼續做面試題5了,進度太慢了!!!

二、面試題5整理:

根據作者**思想,做了如下改動:

void printlistreversingly_iteratively(listnode*phead)

intvalue;

while(!nodes.empty())

}

這裡將stack的元素設定為了m_nvalue的型別,仔細想想後,認為還是原**更合理,原因如下:

原**中,節點位址入棧,因此棧中每個元素所佔儲存是固定的,在32位作業系統下,指標(位址)佔4位元組;但如果儲存的是節點資料元素,那麼每個元素所佔儲存很可能大於4位元組;

void printlistreversingly_recursively(listnode*phead)

else

}

劍指offer 面試題5

題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。說明 本題要求不能破壞原本的資料結構。include include using namespace std struct listnode void printlistreverse listnode phead while nodes...

劍指offer 面試題5

在完成第五題之前我想先複習一下鍊錶的基本操作如下 struct listnode 鍊錶尾插法 注意頭指標phead的定義 判斷鍊錶是否為空 void addtotail listnode phead,int value else pnode pnext pnew 刪除鍊錶中的某個節點 void re...

劍指Offer 面試題5替換空格

note 劍指offer的題可以在牛客網上做題驗證思路的正確性 思路 因為stringbuffer本身是可變字串序列,可以修改,實際上它的可變是犧牲空間換取的。替換可能導致超出其容量,char陣列的複製和新建。public string replacespace stringbuffer str s...