首頁 - 網(wǎng)校 - 萬題庫 - 直播 - 雄鷹網(wǎng)校 - 團(tuán)購 - 書城 - ? - 學(xué)習(xí)通 - 導(dǎo)航 -
首頁網(wǎng)校萬題庫直播雄鷹網(wǎng)校團(tuán)購書城?論壇實(shí)用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓(xùn)
專升本
自學(xué)考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點(diǎn)日語
職稱英語
口譯筆譯
申碩英語
零起點(diǎn)韓語
商務(wù)英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點(diǎn)英語
托福考試
托業(yè)考試
零起點(diǎn)法語
雅思考試
成人英語三級
零起點(diǎn)德語
等級考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報 關(guān) 員
外 銷 員
價格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國際商務(wù)
心理咨詢
營 銷 師
司法考試
國際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會計從業(yè)資格
基金從業(yè)資格
統(tǒng)計從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計師
會計職稱
法律顧問
ACCA考試
初級會計職稱
資產(chǎn)評估師
高級經(jīng)濟(jì)師
注冊會計師
高級會計師
美國注冊會計師
審計師考試
國際內(nèi)審師
注冊稅務(wù)師
理財規(guī)劃師
一級建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價師
二級建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
注冊給排水
造價員考試
注冊計量師
環(huán)保工程師
化工工程師
暖通工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
消防工程師
監(jiān)理工程師
房地產(chǎn)估價
土地估價師
安全評價師
房地產(chǎn)經(jīng)紀(jì)人
投資項目管理師
環(huán)境影響評價師
土地登記代理人
寶寶起名
繽紛校園
實(shí)用文檔
入黨申請
英語學(xué)習(xí)
思想?yún)R報
作文大全
工作總結(jié)
求職招聘 論文下載 直播課堂
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員 > 正文

2015年軟件水平考試程序員精選題(1)

考試吧整理“2015年軟件水平考試程序員精選題(1)”供考生參考,更多軟件水平考試資訊和備考資料請關(guān)注考試吧軟件水平考試網(wǎng)。

  -查找鏈表中倒數(shù)第k個結(jié)點(diǎn)

  題目:輸入一個單向鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點(diǎn)。鏈表的倒數(shù)第0個結(jié)點(diǎn)為鏈表的尾指針。鏈表結(jié)點(diǎn)定義如下:

  struct ListNode

  {

  int m_nKey;

  ListNode* m_pNext;

  };

  分析:為了得到倒數(shù)第k個結(jié)點(diǎn),很自然的想法是先走到鏈表的尾端,再從尾端回溯k步。可是輸入的是單向鏈表,只有從前往后的指針而沒有從后往前的指針。因此我們需要打開我們的思路。

  既然不能從尾結(jié)點(diǎn)開始遍歷這個鏈表,我們還是把思路回到頭結(jié)點(diǎn)上來。假設(shè)整個鏈表有n個結(jié)點(diǎn),那么倒數(shù)第k個結(jié)點(diǎn)是從頭結(jié)點(diǎn)開始的第n-k-1個結(jié)點(diǎn)(從0開始計數(shù))。如果我們能夠得到鏈表中結(jié)點(diǎn)的個數(shù)n,那我們只要從頭結(jié)點(diǎn)開始往后走n-k-1步就可以了。如何得到結(jié)點(diǎn)數(shù)n?這個不難,只需要從頭開始遍歷鏈表,每經(jīng)過一個結(jié)點(diǎn),計數(shù)器加一就行了。

  這種思路的時間復(fù)雜度是O(n),但需要遍歷鏈表兩次。第一次得到鏈表中結(jié)點(diǎn)個數(shù)n,第二次得到從頭結(jié)點(diǎn)開始的第n­-k-1個結(jié)點(diǎn)即倒數(shù)第k個結(jié)點(diǎn)。

  如果鏈表的結(jié)點(diǎn)數(shù)不多,這是一種很好的方法。但如果輸入的鏈表的結(jié)點(diǎn)個數(shù)很多,有可能不能一次性把整個鏈表都從硬盤讀入物理內(nèi)存,那么遍歷兩遍意味著一個結(jié)點(diǎn)需要兩次從硬盤讀入到物理內(nèi)存。我們知道把數(shù)據(jù)從硬盤讀入到內(nèi)存是非常耗時間的操作。我們能不能把鏈表遍歷的次數(shù)減少到1?如果可以,將能有效地提高代碼執(zhí)行的時間效率。

  如果我們在遍歷時維持兩個指針,第一個指針從鏈表的頭指針開始遍歷,在第k-1步之前,第二個指針保持不動;在第k-1步開始,第二個指針也開始從鏈表的頭指針開始遍歷。由于兩個指針的距離保持在k-1,當(dāng)?shù)谝粋(走在前面的)指針到達(dá)鏈表的尾結(jié)點(diǎn)時,第二個指針(走在后面的)指針正好是倒數(shù)第k個結(jié)點(diǎn)。

  這種思路只需要遍歷鏈表一次。對于很長的鏈表,只需要把每個結(jié)點(diǎn)從硬盤導(dǎo)入到內(nèi)存一次。因此這一方法的時間效率前面的方法要高。

  思路一的參考代碼:

  ///////////////////////////////////////////////////////////////////////

  // Find the kth node from the tail of a list

  // Input: pListHead - the head of list

  // k - the distance to the tail

  // Output: the kth node from the tail of a list

  ///////////////////////////////////////////////////////////////////////

  ListNode* FindKthToTail_Solution1(ListNode* pListHead, unsigned int k)

  {

  if(pListHead == NULL)

  return NULL;

  // count the nodes number in the list

  ListNode *pCur = pListHead;

  unsigned int nNum = 0;

  while(pCur->m_pNext != NULL)

  {

  pCur = pCur->m_pNext;

  nNum ++;

  }

  // if the number of nodes in the list is less than k

  // do nothing

  if(nNum < k)

  return NULL;

  // the kth node from the tail of a list

  // is the (n - k)th node from the head

  pCur = pListHead;

  for(unsigned int i = 0; i < nNum - k; ++ i)

  pCur = pCur->m_pNext;

  return pCur;

  }

  相關(guān)推薦:

  2015年軟考信息技術(shù)處理員考前知識點(diǎn)總結(jié)匯總

  2015年軟件水平考試《程序員》提高練習(xí)題匯總

  2015軟件水平考試《程序員》知識點(diǎn)總結(jié)匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網(wǎng) All Rights Reserved 
中國科學(xué)院研究生院權(quán)威支持(北京)
在線模擬試題
考證通關(guān)殺器
考試最新資訊
學(xué)
一次通關(guān)技巧