2017自學(xué)考試《現(xiàn)代漢語專題》多選試題及答案
(一)

單向鏈表的反轉(zhuǎn)是一個經(jīng)常被問到的一個面試題,也是一個非;A(chǔ)的問題。比如一個鏈表是這樣的: 1->2->3->4->5 通過反轉(zhuǎn)后成為5->4->3->2->1。
最容易想到的方法遍歷一遍鏈表,利用一個輔助指針,存儲遍歷過程中當(dāng)前指針指向的下一個元素,然后將當(dāng)前節(jié)點(diǎn)元素的指針反轉(zhuǎn)后,利用已經(jīng)存儲的指針往后面繼續(xù)遍歷。源代碼如下:
struct linka {
int data;
linka* next;
};
void reverse(linka*& head) {
if(head ==NULL)
return;
linka *pre, *cur, *ne;
pre=head;
cur=head->next;
while(cur)
{
ne = cur->next;
cur->next = pre;
pre = cur;
cur = ne;
}
head->next = NULL;
head = pre;
}
還有一種利用遞歸的方法。這種方法的基本思想是在反轉(zhuǎn)當(dāng)前節(jié)點(diǎn)之前先調(diào)用遞歸函數(shù)反轉(zhuǎn)后續(xù)節(jié)點(diǎn)。源代碼如下。不過這個方法有一個缺點(diǎn),就是在反轉(zhuǎn)后的最后一個結(jié)點(diǎn)會形成一個環(huán),所以必須將函數(shù)的返回的節(jié)點(diǎn)的next域置為NULL。因為要改變head指針,所以我用了引用。算法的源代碼如下:
linka* reverse(linka* p,linka*& head)
{
if(p == NULL || p->next == NULL)
{
head=p;
return p;
}
else
{
linka* tmp = reverse(p->next,head);
tmp->next = p;
return p;
}
}
、谝阎猄tring類定義如下:
class String
{
public:
String(const char *str = NULL); /pic/p>
String(const String &another); /pic/p>
~ String(); /pic/p>
String & operater =(const String &rhs); /pic/p>
private:
char *m_data; /pic/p>
};
嘗試寫出類的成員函數(shù)實(shí)現(xiàn)。
【自學(xué)考試《現(xiàn)代漢語專題》多選試題及答案】相關(guān)文章:
自學(xué)考試《現(xiàn)代漢語專題》同步試題及答案02-09
自學(xué)考試《現(xiàn)代漢語專題》測試題「帶答案」04-09
自學(xué)考試《現(xiàn)代漢語專題》預(yù)測試題11-14
2017自學(xué)考試《現(xiàn)代漢語專題》專項試題:單選題05-03
自學(xué)考試《現(xiàn)代漢語專題》備考練習(xí)題及答案04-09
2017自學(xué)考試《現(xiàn)代漢語專題》測試卷「帶答案」03-06
2017年自學(xué)考試《現(xiàn)代漢語專題》同步練習(xí)題02-26
2017自學(xué)考試《現(xiàn)代漢語言》練習(xí)題及答案02-15
- 相關(guān)推薦