日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从尾到头打印单向链表

發布時間:2025/5/22 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从尾到头打印单向链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:

給定一個單項鏈表的頭結點,從尾到頭打印鏈表中的節點的值。

?

分析:

思路一

由于從鏈表的結尾開始逆序打印,也就是說最后的節點先打印,聯想到后進先出,可以使用棧來依次把鏈表節點保存起來,然后從新棧頂開始獲取節點打印并且把節點出棧,直到棧為空,打印結束。見示例代碼reversePrintByStack。

?

思路二

由于打印的思想跟棧類似,可以進一步聯想到函數調用保留現場也是通過棧的方式實現的,因此可以考慮使用遞歸來實現,如果當前節點后面還有節點,則查找后面的節點,等找到后面節點返回了,再打印當前節點。如果當前節點后面沒有節點了,就直接打印當前節點的值。見示例代碼reversePrintByRecursion。

?

c++實例代碼

1 #include <iostream> 2 #include <stack> 3 4 using namespace std; 5 6 //單鏈表節點 7 struct ListNode { 8 //節點存儲的數字 9 int m_nValue; 10 //下一個節點的指針 11 ListNode* m_pNext; 12 }; 13 14 /************************************************************************/ 15 /* @brif 在鏈表結尾增加節點 16 /* @param pHead 鏈表頭結點 17 /* @param value 要增加的節點值 18 /************************************************************************/ 19 void AddNodeToTail(ListNode** pHead, int value) 20 { 21 ListNode *addNode = new ListNode; 22 23 if (!addNode) 24 { 25 cout << "add node fail!!!" << endl; 26 return; 27 } 28 addNode->m_nValue = value; 29 addNode->m_pNext = nullptr; 30 31 //頭結點為空的情況,新增加的節點作為頭結點 32 if (!*pHead) 33 { 34 *pHead = addNode; 35 } 36 //頭結點不為空的情況,查找到最后一個節點,修改最后一個節點的指向 37 else 38 { 39 ListNode* tmpNode = *pHead; 40 //找到最后一個頭結點 41 while (tmpNode->m_pNext) 42 { 43 tmpNode = tmpNode->m_pNext; 44 } 45 tmpNode->m_pNext = addNode; 46 } 47 } 48 49 /************************************************************************/ 50 /* @brif 打印鏈表中的節點 51 /* @param pHead 鏈表頭結點 52 /************************************************************************/ 53 void printLinkList(ListNode* pHead) 54 { 55 ListNode* currNode = pHead; 56 57 if (!currNode) 58 { 59 cout << "空鏈表" << endl; 60 } 61 62 while (currNode) 63 { 64 cout << currNode->m_nValue << "->"; 65 currNode = currNode->m_pNext; 66 } 67 cout << "結束" << endl; 68 } 69 70 /************************************************************************/ 71 /* @brif 刪除鏈表中的所有節點 72 /* @param pHead 鏈表頭結點 73 /************************************************************************/ 74 void removeAllNode(ListNode** pHead) 75 { 76 ListNode* currNode = *pHead; 77 78 if (!*pHead) 79 { 80 cout << "空鏈表" << endl; 81 } 82 83 ListNode* delNode = nullptr; 84 while ((*pHead)->m_pNext) 85 { 86 delNode = (*pHead); 87 (*pHead) = (*pHead)->m_pNext; 88 delete delNode; 89 delNode = nullptr; 90 } 91 delete (*pHead); 92 *pHead = nullptr; 93 } 94 95 /************************************************************************/ 96 /* @brif 使用棧逆序打印鏈表 97 /* @param pHead 鏈表頭結點 98 /************************************************************************/ 99 void reversePrintByStack(ListNode* pHead) 100 { 101 if (!pHead) 102 { 103 cout << "空鏈表" << endl; 104 } 105 106 stack<ListNode*> listStack; 107 ListNode* tmpNode = pHead; 108 109 //依次把鏈表中的節點放到棧中 110 while (tmpNode->m_pNext) 111 { 112 listStack.push(tmpNode); 113 tmpNode = tmpNode->m_pNext; 114 } 115 //把最后一個節點也加入到棧中 116 listStack.push(tmpNode); 117 118 //如果棧不為空,則打印最上面的節點,然后出棧 119 while (!listStack.empty()) 120 { 121 cout << (listStack.top())->m_nValue << "\t"; 122 listStack.pop(); 123 } 124 } 125 126 /************************************************************************/ 127 /* @brif 使用遞歸的方法逆序打印鏈表 128 /* @param pHead 鏈表頭結點 129 /************************************************************************/ 130 void reversePrintByRecursion(ListNode* pHead) 131 { 132 if (!pHead) 133 { 134 cout << "空鏈表" << endl; 135 } 136 137 if (pHead->m_pNext) 138 { 139 reversePrintByRecursion(pHead->m_pNext); 140 cout << pHead->m_nValue << "\t"; 141 } 142 else 143 { 144 cout << pHead->m_nValue << "\t"; 145 } 146 } 147 148 int main() 149 { 150 ListNode* pHead = nullptr; 151 152 cout << "原始鏈表:" << endl; 153 //創建鏈表 154 for (int i = 1; i <= 10; ++i) 155 { 156 AddNodeToTail(&pHead, i); 157 } 158 printLinkList(pHead); 159 160 cout << endl <<"通過棧逆序打印鏈表:" << endl; 161 reversePrintByStack(pHead); 162 163 cout << endl << "通過遞歸的方法逆序打印鏈表" << endl; 164 reversePrintByRecursion(pHead); 165 166 removeAllNode(&pHead); 167 168 cout << endl; 169 170 return 0; 171 }

?

運行結果

?

轉載于:https://www.cnblogs.com/huangwenhao/p/11177314.html

總結

以上是生活随笔為你收集整理的从尾到头打印单向链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产大学生视频 | 日本乱子伦 | 美女野外找人搭讪啪啪 | 天堂俺去俺来也www久久婷婷 | 69视频在线看 | 爱豆国产剧免费观看大全剧集 | 97超在线 | 亚洲一级Av无码毛片久久精品 | 中文字幕在线观看亚洲 | 国产一区二区精品在线观看 | 一区二区三区亚洲视频 | 99re这里只有精品在线 | 亚洲国产精品成人综合久久久 | 黄色精品一区二区 | 国产色视频网站 | 日本在线观看中文字幕 | 久久久久久国产精品无码 | 成年人一级黄色片 | 色婷婷中文 | 奇米99| 越南a级片| 91爱爱爱爱 | 91捆绑91紧缚调教91 | 国产黄片一区二区三区 | 国产午夜无码视频在线观看 | 美女被日网站 | 久久精品超碰 | 涩涩视频免费在线观看 | 中文字幕精品在线视频 | 国产精品丝袜黑色高跟 | 五月天av影院 | 88av网 | 亚洲精品乱码久久久久久国产主播 | 亚洲成a人v欧美综合天堂麻豆 | 手机看片1024国产 | 九色一区 | 精品一区二区三区在线播放 | 超污巨黄的小短文 | 毛片网站网址 | 调教驯服丰满美艳麻麻在线视频 | 女人喂男人奶水做爰视频 | 久久av网站 | 亚洲品质自拍视频网站 | 亚洲人免费视频 | 欧美日韩在线视频观看 | 亚洲欧美视频 | 无码人妻丰满熟妇区五十路百度 | 狠狠干天天干 | 视频二区三区 | 爱乃なみ加勒比在线播放 | 日本三级吃奶头添泬 | 环太平洋3:泰坦崛起 | av色哟哟| 亚洲AV综合色区无码国产播放 | 嫩草视频在线 | 日韩久久影院 | 色片免费观看 | 亚洲人人精品 | 国模吧无码一区二区三区 | 免费看黄在线 | wwwxxxx在线观看| 性做久久久久 | 亚洲高清不卡 | 日韩高清不卡 | 国产麻豆电影在线观看 | av色资源 | 91看片在线播放 | 欧美经典一区二区 | 99re6在线 | 精品午夜久久 | 精品欧美一区二区精品少妇 | 国产无精乱码一区二区三区 | 国产自偷自拍视频 | av在线麻豆 | 亚洲涩涩涩 | 怡红院成人网 | 四虎色| 亚洲天天av | 亚洲免费a视频 | 国产视频一区二区在线观看 | 日韩欧美亚洲在线 | 国产熟妇搡bbbb搡bbbb搡 | 欧美激情国产在线 | 18pao国产成视频永久免费 | aaa在线| 欧美精品1区2区3区 精品成人一区 | 色小说在线 | 日本一区不卡 | 一道本无吗一区 | 国产一区在线观看免费 | 深夜福利在线播放 | jizz毛片| 91精品视频网站 | 男生操女生动漫 | 欧美黄色激情视频 | 国产精品伦理一区 | 日韩av色图 | 日日撸夜夜操 | 亚洲A∨无码国产精品 |