说明:
1.本系列是根据《剑指Offer》这个系列做的一个小笔记。
2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难。
3.刚开始准备刷LeetCode、LintCode,突然看见一个大神研究生正在刷这个系列,故跟着大神学习。
4.在别人基础之上进行部分优化,总结自己的观点。
问题:
输入一个链表,返回一个反序的链表。
思路:
这题太简单了,什么方法都可以!首先肯定是遍历链表,之后怎么办都可以--->>>放在数组、链表、栈、队列、vector.......都可以了
程序:
我之前都是用vector,所以这次就用stack实现一下!
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 /* 5 typedef struct DATA 6 { 7 int sNumb; 8 char sName[10]; 9 float sMath; 10 }DATA;//结构体定义比较类型 11 */ 12 13 typedef int DATA; 14 struct SNode 15 { 16 DATA data; 17 SNode* pNext; 18 }; 19 SNode* g_pHead = NULL;//第一个链表是空链表 20 //从头插入一个数据 21 void AddHead(DATA data) 22 { 23 SNode* p = new SNode;//申请一个堆空间,8字节 24 p->data = data; 25 p->pNext = g_pHead; 26 g_pHead = p;//把新插入的节点当做头 27 } 28 29 int main(int argc, char*argv[]) 30 { 31 stack<DATA> sta; 32 AddHead(1); 33 AddHead(2); 34 AddHead(3); 35 AddHead(4); 36 SNode* p = g_pHead; 37 cout << "元数据:"; 38 while(p) 39 { 40 sta.push(p->data); 41 cout << p->data; 42 p = p->pNext; 43 } 44 cout << endl; 45 cout << "颠倒之后数据:"; 46 while(!sta.empty()) 47 { 48 cout<<sta.top(); 49 sta.pop(); 50 } 51 return 0; 52 }