資源描述:
《c++筆試題匯總-最新》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、c++筆試題匯總最新35頁①鏈表反轉(zhuǎn)單向鏈表的反轉(zhuǎn)是一個經(jīng)常被問到的一個面試題,也是一個非?;A(chǔ)的問題。比如一個鏈表是這樣的:1->2->3->4->5通過反轉(zhuǎn)后成為5->4->3->2->1。最容易想到的方法遍歷一遍鏈表,利用一個輔助指針,存儲遍歷過程中當前指針指向的下一個元素,然后將當前節(jié)點元素的指針反轉(zhuǎn)后,利用已經(jīng)存儲的指針往后面繼續(xù)遍歷。源代碼如下:1.structlinka{2.intdata;3.linka*next;4.};5.voidreverse(linka*&head){6.if(head==NULL)7.??????????????????return;8
2、.linka*pre,*cur,*ne;9.pre=head;10.cur=head->next;11.while(cur)12.{13.??ne=cur->next;14.??cur->next=pre;15.??pre=cur;16.??cur=ne;17.}18.head->next=NULL;19.head=pre;20.}還有一種利用遞歸的方法。這種方法的基本思想是在反轉(zhuǎn)當前節(jié)點之前先調(diào)用遞歸函數(shù)反轉(zhuǎn)后續(xù)節(jié)點。源代碼如下。不過這個方法有一個缺點,就是在反轉(zhuǎn)后的最后一個結(jié)點會形成一個環(huán),所以必須將函數(shù)的返回的節(jié)點的next域置為NULL。因為要改變head指針,所以我用
3、了引用。算法的源代碼如下:2791.linka*reverse(linka*p,linka*&head)2.{3.if(p==NULL
4、
5、p->next==NULL)4.{5.??head=p;6.??returnp;7.}8.else9.{10.??linka*tmp=reverse(p->next,head);11.??tmp->next=p;12.??returnp;13.}14.}②已知String類定義如下:classString{public:String(constchar*str=NULL);//通用構(gòu)造函數(shù)String(constString&another)
6、;//拷貝構(gòu)造函數(shù)~String();//析構(gòu)函數(shù)String&operater=(constString&rhs);//賦值函數(shù)private:char*m_data;//用于保存字符串};嘗試寫出類的成員函數(shù)實現(xiàn)。答案:String::String(constchar*str){if(str==NULL)//strlen在參數(shù)為NULL時會拋異常才會有這步判斷{m_data=newchar[1];m_data[0]='