面试题五: 从尾到头打印链表
2015-08-14 02:11
603 查看
/* brief: 输入一个链表的头结点,从尾到头反过来打印出每个结点的数值。 */ #include "iostream" using namespace std; // #include "List.h" #include "stack" void PrintListReversingly_Iteratively(ListNode *pHead) { std::stack<ListNode*>nodes; ListNode *pNode = pHead; while(pNode != NULL) { nodes.push(pNode); pNode = pNode->m_pNext; } while(!nodes.empty()) { pNode = nodes.top(); printf("%d\t", pNode->m_nValue); nodes.pop(); } } void PrintListReversingly_Recursively(ListNode *pHead) { if(pHead != NULL) { if(pHead->m_pNext != NULL) { PrintListReversingly_Recursively(pHead->m_pNext); } printf("%d\t", pHead->m_nValue); } } void Test(ListNode *pHead) { PrintList(pHead); PrintListReversingly_Iteratively(pHead); printf("\n"); PrintListReversingly_Recursively(pHead); } // 1->2->3->4->5 void Test1() { printf("\nTest1 begins.\n"); // ListNode *pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); Test(pNode1); DestroyList(pNode1); } // 只有一个结点的链表: 1 void Test2() { printf("\nTest2.begins.\n"); // ListNode* pNode1 = CreateListNode(1); Test(pNode1); DestroyList(pNode1); } // 空链表 void Test3() { printf("\nTest3 begins.\n"); Test(NULL); } int main(int argc, char * argv[]) { Test1(); Test2(); Test3(); system("pause"); system("pause"); return 0; }
List.h
<pre name="code" class="cpp"> struct ListNode { int m_nValue; ListNode *m_pNext; }; __declspec( dllexport ) ListNode* CreateListNode(int value); // 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。 __declspec( dllexport ) void ConnectListNodes(ListNode* pCurrent, ListNode* pNext); __declspec( dllexport ) void PrintList(ListNode* pHead); __declspec( dllexport ) void DestroyList(ListNode* pHead);
List.cpp
/* */ #include "list.h" #include "stdio.h"<span style="white-space:pre"> </span>// NULL // #include "stdlib.h" ListNode *CreateListNode(int value) { <span style="white-space:pre"> </span>ListNode *pNode = new ListNode; <span style="white-space:pre"> </span>pNode->m_nValue = value; <span style="white-space:pre"> </span>pNode->m_pNext = NULL; <span style="white-space:pre"> </span>// <span style="white-space:pre"> </span>return pNode; } void ConnectListNodes(ListNode *pCurrent, ListNode *pNext) { <span style="white-space:pre"> </span>if(pCurrent == NULL) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>printf("Error to connect two nodes.\n"); <span style="white-space:pre"> </span>exit(1);// exit(1)表示异常退出.这个1是返回给操作系统的。 <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>pCurrent->m_pNext = pNext; } void PrintList(ListNode *pHead) { <span style="white-space:pre"> </span> printf("PrintList starts.\n"); <span style="white-space:pre"> </span> ListNode *pNode = pHead; <span style="white-space:pre"> </span> while(pNode != NULL) <span style="white-space:pre"> </span> { <span style="white-space:pre"> </span> printf("%d\t", pNode->m_nValue); <span style="white-space:pre"> </span> pNode = pNode->m_pNext; <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> printf("\nPrintList ends.\n"); } void DestroyList(ListNode* pHead) { <span style="white-space:pre"> </span>ListNode *pNode = pHead; <span style="white-space:pre"> </span>while(pNode != NULL) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>pHead = pHead->m_pNext; <span style="white-space:pre"> </span>delete pNode; <span style="white-space:pre"> </span>pNode = pHead; <span style="white-space:pre"> </span>} }
相关文章推荐
- 腾讯面试专场
- 阿里巴巴面试专场
- 黑马程序员--Java基础--String
- 黑马程序员——-——java基础之异常
- 黑马程序员---关于取出一个字符串中字母个数的题目分析
- 【经典面试题】有关sizeof、strlen处理字符串的问题
- 做什么职业,也别做程序员,尤其是Java程序员
- 【经典面试题】有关指针、内存空间如何申请调用的问题
- 黑马程序员———集合及其collection接口及其子类的简单介绍
- 黑马程序员———正则表达式及其其他类
- 十个让你成为优秀程序员的有效方法
- 黑马程序员———API之StringBuffer、Integer和Character
- 黑马程序员———面向对象之包、访问修饰符、内部类
- iOS 面试题(二)
- 黑马程序员--java概述
- 剑指offer面试题java实现之题5:逆序打印链表
- 黑马程序员———面向对象之继承super和final关键字
- 黑马程序员———面向对象之封装及this和static关键字
- 黑马程序员———Java编程基础之面向对象
- 黑马程序员———Java基本语法