2013年9月7日

《剑指offer》面试题15—输出链表中倒数第n个结点

摘要: 题目:如题,且从1开始计数。思路:要求只遍历一遍链表:设置两个指针,一个先走n步后另一个开始同步后移,当快指针已经到链表尾时慢指针正好到要输出的结点。注意:本题思路比较好想到,主要考察的是代码的鲁棒性!要判断输入参数是否尾空指针,以及n是否有效。 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 int val; 13 ... 阅读全文

posted @ 2013-09-07 22:40 CnZyy 阅读(328) 评论(0) 推荐(0) 编辑

《剑指offer》面试题13—O(1)时间删除链表结点

摘要: 题目:给定单向链表的头指针和某结点指针,实现函数在O(1)时间内删除指定节点。思路:由于没有要删除结点(j结点)的前一个结点(i结点)指针,通常想法是从头开始遍历找到指定结点的前一个结点(i结点),然后使i结点的指针指向j结点的后一个结点k结点。但是这样是O(n)的时间复杂度,不符合要求。解决方法很巧妙:由于有要删除的j结点的指针,因此可以很容易得到j结点的后一个结点k结点的指针,只要把k结点的内容复制给i结点,然后删除k结点即可。但是要注意!如果链表只有一个结点,head指针要指NULL;如果要删除的是尾结点,即后面没有结点了,那么也只能从头开始遍历。 1 #include 2 usi... 阅读全文

posted @ 2013-09-07 22:22 CnZyy 阅读(415) 评论(0) 推荐(0) 编辑

《剑指offer》面试题5—从尾到头打印链表

摘要: 重要思路:这个问题肯定要遍历链表,遍历链表的顺序是从头到尾,而要输出的顺序却是从尾到头,典型的“后进先出”,可以用栈实现。注意stl栈的使用,遍历stack的方法。 1 #include 2 #include 3 using namespace std; 4 5 class Node 6 { 7 public: 8 Node(int v, Node* n) 9 {val = v;10 next = n;}11 ~Node(){}12 int val;13 Node* next;14 };15 Node * phead = NULL;16 1... 阅读全文

posted @ 2013-09-07 19:27 CnZyy 阅读(226) 评论(0) 推荐(0) 编辑

C++虚继承作用

摘要: C++虚继承可以防止多重继承产生的二义性问题。 虚继承,就是在被继承的类前面加上virtual关键字,这时被继承的类称为虚基类,如下面代码中的base类。虚继承在多重继承的时可以防止二义性。class baseclass derived1 : virutal public baseclass derived2 : virtual public baseclass derived3 : public derived1, public derived2以上的代码如果用到了base中的某个成员变量就不会产生二义性。和#progma once在头文件中的作用类似。请看下面的例子:#include us 阅读全文

posted @ 2013-09-07 11:23 CnZyy 阅读(1274) 评论(0) 推荐(0) 编辑

导航