第五十八題(從尾到頭輸出鏈表)
阿新 • • 發佈:2017-05-27
urn stream 尾到頭 csdn ext fontsize 方法 name html
執行結果:
58.從尾到頭輸出鏈表。
題目:輸入一個鏈表的頭結點,從尾到頭反過來輸出每一個結點的值。
思路:題不難,提供幾種思路
1.使用棧的先進後出特性實現,遍歷鏈表元素依次入棧,再出棧就可以達到目的
2.使用數組先暫存順序遍歷的結果,再對數組反向遍歷就可以。
3.遞歸,也就是這裏採用的方法。
C++代碼:
#include "stdafx.h" #include<ctime> #include<iostream> namespace MS100P_58 { void reversePrintList(node* p) { if (p == NULL) return; reversePrintList(p->next); cout << p->data << ‘ ‘; } void test() { node *head = createList(20); printList(head); reversePrintList(head->next); cout << endl; deleteList(head); } } int _tmain(int argc, _TCHAR* argv[]) { MS100P_58::test(); return 0; }
執行結果:
附測試代碼中用到的創建,打印,刪除鏈表的函數
struct node { int data; node* next; }; node* createList(int len) //創建鏈表 { node* head = new node(); node* pCurrent = head; srand(time(0)); for (int i = 0; i < len; i++) { pCurrent->next = new node(); pCurrent = pCurrent->next; pCurrent->data = rand() % 100; } pCurrent->next = NULL; return head; } void deleteList(node *p) { node*q; while (p != NULL) { q = p; p = p->next; delete q; } } void printList(node * head) //打印輸出鏈表內容 { node* p = head->next; while (NULL != p) { cout << p->data << ‘ ‘; p = p->next; } cout << endl; }
第五十八題(從尾到頭輸出鏈表)