2013年9月8日

《剑指offer》面试题22—栈的压入、弹出序列

摘要: 《程序员面试宝典》上也有经典的火车进站问题,类似。如果12345是压栈顺序,序列45321可能是出栈顺序,但序列43512不可能。规律:对序列中任意元素n,排在n后且比n小的元素一定是从大到小顺序排列的,可以不相邻。如果要用编程解决,思路应该是:依次判断出栈序列中的每个数字,如果下一个弹出的数字是栈顶数字则弹出;如果不是则把剩余的未入栈的数字依次入栈,直到把下一个需要弹出的数字压到栈顶为止。如果所有数字都入栈了还未遇到下一个弹出的数字,则该序列不可能是出栈序列。 阅读全文

posted @ 2013-09-08 20:16 CnZyy 阅读(313) 评论(0) 推荐(0) 编辑

《剑指offer》面试题21—包含min函数的栈

摘要: 题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min。要求push,min,pop时间都是O(1)。思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素;min函数直接取辅助栈栈顶元素即可;有元素弹出时辅助栈元素也弹出,这样栈顶就是剩下的元素中的最小的了。 1 #include 2 #include 3 using namespace std; 4 5 template 6 class StackWithMin 7 { 8 public: 9 void Push(const T& element);10 T Min();11 voi... 阅读全文

posted @ 2013-09-08 17:07 CnZyy 阅读(246) 评论(0) 推荐(0) 编辑

《剑指offer》面试题7—用两个栈实现队列

摘要: 题目:给出队列声明,要求实现AppendTail和DeleteHead函数。template class CQueue{public: void AppendTail(const T& element); T DeleteHead();private: stack stack1; stack stack2;};思路:要用两个先进后出的栈实现先进先出的队列。压栈总是压入stack1,要获得队列头时:如果stack2为空,则把stack1依次弹出栈并压入stack2,取stack2栈顶元素;如果stack2不为空,则直接取stack2栈顶元素。 1 #include 2 ... 阅读全文

posted @ 2013-09-08 17:03 CnZyy 阅读(227) 评论(0) 推荐(0) 编辑

《剑指offer》面试题17—合并两个排序链表

摘要: 题目:输入两个递增排顺序的链表,合并这两个链表并使合并后的链表仍是递增排序的。重点:1.代码鲁棒性:要判断输入的两个链表都为NULL;其中一个链表为NULL的情况。2.用递归实现,注意递归的思路。 1 #include 2 3 using namespace std; 4 5 struct Node 6 { 7 int val; 8 Node* next; 9 };10 11 12 void PrintLink(Node* phead)13 {14 Node* p = phead;15 while(p != NULL)16 {17 ... 阅读全文

posted @ 2013-09-08 10:39 CnZyy 阅读(309) 评论(0) 推荐(0) 编辑

《剑指offer》面试题16—反转链表

摘要: Node* p1 p2 p3思路:开始时,p1为NULL,p2=phead,p3=p2—>next。使p2—>next = p1,然后使p1=p2,p2=p3。如果只有1个结点则此时p2为NULL,结束循环;否则继续执行,直到p2为NULL。注意:注意代码鲁棒性!判断头结点为NULL;如果只有一个结点。 1 #include 2 using namespace std; 3 4 5 class Node 6 { 7 public: 8 Node(int v, Node* n) 9 {val = v;10 next = n;}11 ~Node(){}12 ... 阅读全文

posted @ 2013-09-08 10:06 CnZyy 阅读(273) 评论(0) 推荐(0) 编辑

导航