一般這樣的題,鏈表肯定不會(huì)是一個(gè)雙向鏈表還帶個(gè)循環(huán)什么的,也就是只給一個(gè)單鏈表的頭結(jié)點(diǎn),然后從尾到頭輸出每個(gè)結(jié)點(diǎn)的值;
公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出正定免費(fèi)做網(wǎng)站回饋大家。如果從前往后去找最后一個(gè)結(jié)點(diǎn),那找到了輸出然后就沒辦法往返回往頭部訪問了,因?yàn)橹皇莻€(gè)單鏈表;因此可以想到,用遞歸來(lái)實(shí)現(xiàn):
#includeusing namespace std; template //將鏈表的結(jié)點(diǎn)定義為模板類,實(shí)現(xiàn)代碼的復(fù)用性 struct ListNode { T _data; ListNode * _next; }; template ListNode * buy_node(T data) //創(chuàng)建結(jié)點(diǎn) { ListNode * tmp = new ListNode ; tmp->_data = data; tmp->_next = NULL; return tmp; } template void init_list(ListNode ** node, T data) //鏈表的初始化 { *node = buy_node(data); } template void push_node(ListNode *& head, T data) //向鏈表中插入結(jié)點(diǎn) { if(head == NULL) { init_list(&head, data); return; } ListNode * tmp = head; while(tmp->_next != NULL) { tmp = tmp->_next; } tmp->_next = buy_node(data); } template void destroy_list(ListNode *& head) //銷毀鏈表 { if(head != NULL) { ListNode * cur = head; ListNode * tmp = head; while(cur != NULL) { tmp = cur; cur = cur->_next; delete tmp; } head = NULL; } } template void print_list(ListNode * head) //正序打印鏈表的數(shù)據(jù) { while(head != NULL) { cout< _data<<"->"; head = head->_next; } cout<<"NULL"< void ReversePrintList(ListNode * head) //逆序打印鏈表,用遞歸 { if(head != NULL) { ReversePrintList(head->_next); cout< _data<<"->"; } else cout<<"NULL->"; } int main() { ListNode * list = NULL; push_node(list, 1); push_node(list, 2); push_node(list, 3); push_node(list, 4); push_node(list, 5); push_node(list, 6); push_node(list, 7); push_node(list, 8); push_node(list, 9); cout<<"print list: "; print_list(list); cout<<"reverse print list: "; ReversePrintList(list); cout< 上面的栗子中只為了完成題目要求并沒有實(shí)現(xiàn)鏈表的其他操作,比如pop數(shù)據(jù)以及查找刪除插入等函數(shù),運(yùn)行程序可得如下結(jié)果:
從上面的程序可以知道,將鏈表逆序輸出其實(shí)就是后插入的結(jié)點(diǎn)先輸出,最開始放進(jìn)去的結(jié)點(diǎn)最后輸出,因此也就是后進(jìn)先出的原則,可以用棧來(lái)實(shí)現(xiàn),從頭開始遍歷鏈表,將結(jié)點(diǎn)一一push_back進(jìn)棧里面,然后再?gòu)臈m斎〕鰯?shù)據(jù),取到的就是鏈表的最后一個(gè)結(jié)點(diǎn),再不斷地pop數(shù)據(jù)然后取棧頂;
上面的程序中用的是非類的變量,下面可以定義一個(gè)鏈表類來(lái)實(shí)現(xiàn),而且當(dāng)程序運(yùn)行完后不用手動(dòng)調(diào)用析構(gòu)函數(shù)釋放空間:
#include#include using namespace std; template struct ListNode //鏈表結(jié)點(diǎn)結(jié)構(gòu)體 { T _data; ListNode * _next; ListNode(T data) :_data(data) ,_next(NULL) {} }; template class List //實(shí)現(xiàn)一個(gè)鏈表類 { public: List() //默認(rèn)構(gòu)造函數(shù) :_head(NULL) {} List(T data) //帶參的構(gòu)造函數(shù) :_head(new ListNode (data)) {} ~List() //析構(gòu)函數(shù),釋放鏈表結(jié)點(diǎn)空間 { if(_head != NULL) { ListNode * tmp = _head; ListNode * cur = _head; while(cur != NULL) { tmp = cur; cur = cur->_next; delete tmp; } _head = NULL; } } void _push(T data) //在鏈表尾部push數(shù)據(jù) { if(_head == NULL) { _head = new ListNode (data); return; } ListNode * tmp = _head; while(tmp->_next != NULL) tmp = tmp->_next; tmp->_next = new ListNode (data); } void print_list() //正序輸出鏈表 { ListNode * tmp = _head; while(tmp != NULL) { cout< _data<<"->"; tmp = tmp->_next; } cout<<"NULL"< list; ListNode * tmp = _head; while(tmp != NULL) //將鏈表結(jié)點(diǎn)依次放入棧中 { list.push_back(tmp->_data); tmp = tmp->_next; } cout<<"reverse print list:"< "; list.pop_back(); } cout<<"NULL"< * _head; }; int main() { List list(1); list._push(2); list._push(3); list._push(4); list._push(5); list._push(6); list._push(7); list._push(8); list._push(9); list.print_list(); list.ReversePrintList(); return 0; } 運(yùn)行程序可得如下結(jié)果:
《完》
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
文章名稱:輸入一個(gè)鏈表的頭結(jié)點(diǎn),從尾到頭反過(guò)來(lái)打印每個(gè)結(jié)點(diǎn)的值——5-創(chuàng)新互聯(lián)
本文路徑:http://weahome.cn/article/dijosp.html