从尾到头打印链表
Posted 三颗心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从尾到头打印链表相关的知识,希望对你有一定的参考价值。
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
思路1:使用栈
思路2:递归
1 #include<iostream> 2 #include <stdlib.h> 3 #include <stack> 4 5 using namespace std; 6 7 struct ListNode 8 { 9 int m_nValue; 10 ListNode* m_pNext; 11 }; 12 13 ListNode* CreateListNode(int value) 14 { 15 ListNode *pNode = new ListNode(); 16 pNode->m_nValue = value; 17 pNode->m_pNext = NULL; 18 return pNode; 19 } 20 21 void PrintListNode(ListNode* pNode) 22 { 23 printf("%d\\n", pNode->m_nValue); 24 } 25 26 //打印链表 27 void PrintList(ListNode* pHead) 28 { 29 ListNode* pNode = pHead; 30 while(pNode != NULL) 31 { 32 cout << pNode->m_nValue<<" "; 33 pNode=pNode->m_pNext; 34 } 35 cout << endl; 36 } 37 38 //在链表结尾添加一个结点 39 void AddToTail(ListNode** pHead, int value) 40 { 41 ListNode* pNew = new ListNode(); 42 pNew->m_nValue = value; 43 pNew->m_pNext = NULL; 44 45 if(*pHead == NULL) 46 { 47 *pHead = pNew; 48 } 49 else 50 { 51 ListNode* pNode = *pHead; 52 while(pNode->m_pNext != NULL) 53 pNode = pNode->m_pNext; 54 55 pNode->m_pNext=pNew; 56 } 57 58 } 59 60 61 //方法1: 用栈实现 62 void PrintListReversingly_Iteratively(ListNode* pHead) 63 { 64 ListNode* pNode = pHead; 65 stack<ListNode*> nodes; 66 67 while(pNode != NULL) 68 { 69 nodes.push(pNode); 70 pNode = pNode->m_pNext; 71 } 72 73 while(!nodes.empty()) 74 { 75 pNode = nodes.top(); 76 cout<<pNode->m_nValue<<" "; 77 nodes.pop(); 78 } 79 cout << endl; 80 } 81 82 //方法2: 递归 83 void PrintListReversingly_Recursively(ListNode* pHead) 84 { 85 ListNode* pNode = pHead; 86 if(pNode != NULL) 87 { 88 if(pNode->m_pNext != NULL) 89 PrintListReversingly_Recursively(pNode->m_pNext); 90 } 91 cout<<pNode->m_nValue<<" "; 92 } 93 94 // 1->2->3->4->5->6->7 95 int main() 96 { 97 ListNode* pNode1 = CreateListNode(1); 98 PrintList(pNode1); 99 100 AddToTail(&pNode1,2); 101 AddToTail(&pNode1,3); 102 AddToTail(&pNode1,4); 103 AddToTail(&pNode1,5); 104 AddToTail(&pNode1,6); 105 AddToTail(&pNode1,7); 106 107 PrintList(pNode1); 108 109 PrintListReversingly_Iteratively(pNode1); 110 PrintListReversingly_Recursively(pNode1); 111 112 return 0; 113 }
以上是关于从尾到头打印链表的主要内容,如果未能解决你的问题,请参考以下文章