上一页 1 ··· 8 9 10 11 12 13 下一页
摘要: 没啥太多技巧,反转就好了。单链表的时候要注意,while中不能将pCur的next指向NULL,否则的话,pNext的next就白指了。#include "stdafx.h"#include <iostream>#include<cstring>#include <vector>#include <assert.h>using namespace std;struct ListNode{ int m_key; ListNode* next;};void createList(ListNode* &pHead){ pHe 阅读全文
posted @ 2012-10-25 23:37 三更_雨 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 自己保存一下,建立链表的程序,省的以后每次建立链表的时候,还需要重新在写。通过下面的代码,建立的链表节点数为10,每个节点保存的数为其下标即:0-9这里要注意一点,在void createList(ListNode* &pHead)的时候,用的是指针引用,因为在main中head并没有开辟空间,如果在createList中为pHead开辟空间的时候,main中的head依旧还是指向NULL的。如果在main中为head开辟了空间的话,就不需要用指针的引用了。道理很简单,就和你传int参数是一个道理。createList中的pHead是形参,也就是说pHead的地址和main中head的 阅读全文
posted @ 2012-10-25 23:11 三更_雨 阅读(19414) 评论(0) 推荐(1) 编辑
摘要: 原文地址: http://blog.csdn.net/jackyliujin/article/details/7581727情况1. 节点只有left/right,没有parent指针,root已知情况2. root未知,但是每个节点都有parent指针情况3. 二叉树是个二叉查找树,且root和两个节点的值(a, b)已知--------------------------------------------------------------------------------虽然情况一是第一个情况,但是看上去比较复杂,我们放到最后来说,先从第二个情况开始说。 10 /\ 6 14 /\ 阅读全文
posted @ 2012-10-25 23:06 三更_雨 阅读(639) 评论(0) 推荐(0) 编辑
摘要: 题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。如果这些数字,是放在数组中给出的话,直接建立小顶堆,然后输出前k个就好了。 时间复杂度 kLog(n),建立堆log(n),共建k次void heapAdjust(int* a,int s, int m){ int temp = a[s]; for(int j=2*s+1; j<=m; j=j*2+1) { if(j<m && a[j] > a[j+1]) j++; if(temp<=a[j]) ... 阅读全文
posted @ 2012-10-25 22:31 三更_雨 阅读(162) 评论(0) 推荐(0) 编辑
摘要: #include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;//对于a来说,除了a[s]之外均满足大顶堆的定义// 该函数将下标 s到m 调整为大顶堆void heapAdjust(int* a,int s, int m){ int temp = a[s]; // 下标从0开始,则两个孩子分别为 2*i+1 和 2*i+2 for(int j=2*s+1; j<=m; j=j*2+1) { // 执行完成后j中保存了两个孩子中较大的孩子的下表 // . 阅读全文
posted @ 2012-10-25 21:45 三更_雨 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode { int m_nKey; ListNode* m_pNext; };两个方法,第一个先遍历,获得链表总共的长度,这样就知道从head到达倒数第k个需要移动多少次,从头在移动一遍。第二个,两个指针,第二个比第一个多移动k次之后,两个指针再一起移动,这样两个指针之间始终有k个距离,当第二个指针移动到NULL的时候,第一个指针所指向的就是倒数第K个。代码如下:template <typename T>struct ListNode{ T m_k... 阅读全文
posted @ 2012-10-25 19:14 三更_雨 阅读(929) 评论(0) 推荐(0) 编辑
摘要: 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。这题貌似也是一道很常见的题目,主要思路就是如下的这段话:我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac的排列。现在是把c放到第一位置的时候了。记住前面我们已经把原先的第一个字符a和后面的b做了交换,为了保证这次c仍然是和原先处在第一位置的a交换,我们 阅读全文
posted @ 2012-10-25 09:53 三更_雨 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 传说这是一道知名外企的笔试题但是看了一些文章,都只是单纯的转了那个算法,弱弱的说一句,那个算法中把'\0'写成了'/0',会导致在while ('/0' != *pTemp) { hashTable[*pTemp] = 1; ++ pTemp; } 这一步的时候,一直循环下去,直到系统中断。不过调试的时候发现了一个很有意思的事情,就是之前pTemp之前是指向aeiou,这就是传入的第二个参数,当遍历完这个参数之后,pTemp会继续指向栈中的下一个地址,也就是第一个参数they are students的地址,这个... 阅读全文
posted @ 2012-10-24 21:35 三更_雨 阅读(8090) 评论(1) 推荐(0) 编辑
摘要: 原文地址:http://www.51testing.com/html/72/n-221172.html传说常见的一个笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数。函数接口声明如下:int strlen(const char *p); 思路分析: 在字符串中通常可以利用最后一个结束符’\0’,但此处参数为const,只读,那么我们不能打他的主意。 函数运行过程中不占用内存基本不可能,除非都使用了寄存器。“不使用中间变量”只是说程序员不能显示的申请内存而已,即不能有局部变量或者动态内存申请。 如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立... 阅读全文
posted @ 2012-10-24 20:31 三更_雨 阅读(4369) 评论(0) 推荐(1) 编辑
摘要: 主要是为了记录最后一种神奇的方法。原文地址:http://www.cnblogs.com/xianghang123/archive/2011/08/24/2152408.html这是一个很有意思的问题,也是在面试中最容易被问到的问题之一。这个问题有个正式的名字叫Hamming_weight,而且wikipedia上也提供了很好的位运算解决的方法,这个下面也会提到。解决这个问题的第一想法是一位一位的观察,判断是否为1,是则计数器加一,否则跳到下一位,于是很容易有这样的程序。int test(int n){ int count=0; while(n != 0){ if(n... 阅读全文
posted @ 2012-10-24 13:14 三更_雨 阅读(291) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 下一页