自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 反转链表(递归与非递归)

题目:定义一个函数,输入一个链表的头结点,反转该链表。 方法一:如果链表只有一个结点或者链表为空,我们直接返回,如果链表的长度大于等于2,我们从第二个结点开始采用头插法插入到链表中。void reverseList(ListNode *&pHead){ if(pHead == NULL)//判断链表是否为空 return; ListNode *p = pHead->next;

2016-01-17 21:37:11 358

原创 判断两个链表是否相交

给出两个单向链表的头指针,比如pHead1和pHead2,判断这两个链表是否相交,如果相交求出第一个相交的结点。 方法一:由于两个链表没有环,我们可以把第二个链表的尾指针指向第一个链表的头结点,此时我们从链表二出发,判断这个新的链表是否存在环,如果存在环则说明这两个链表相交,否则,这两个链表不相交。环的连接点即两个链表的第一个交点。在上一篇博客中我们已经说过如何判断一个链表是否存在环,而

2016-01-17 17:31:15 422

原创 单链表中是否有环(长度和连接点)

给定一个单链表,只给出头结点指针pHead: (1)如何判断链表中是否存在环。 (2)如何知道环的长度。 (3)如何找出环的连接点。 (4)带环链表的长度。 问题一,我们设置两个指针slow和fast,slow指针每次只走一步,fast指针每次走两步,如果fast指针可以追赶上slow指针,也就是说fast指针和slow指针相等。那么我们就说链表中

2016-01-17 16:10:27 570

原创 求链表中间结点

题目:求链表的中间结点。如果链表中结点总数为奇数,返回中间结点;如果结点总数是偶数,返回中间两个结点的任意一个。 解析:我们可以定义两个指针,同时从链表的头结点出发,第一指针一次走一步,第二个指针一次走两步,当第二个指针走到链表的末尾时,第一指针正好在链表的中间。以下代码是:如果结点的总数为偶数,我们返回中间结点的后一个结点。//找到链表中间结点ListNode * findMidVa

2016-01-16 21:25:49 446

原创 链表中倒数第k个结点

题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第一个结点。例如一个链表有6个结点,从头结点开始他们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。 解析:为了实现只遍历链表一次就能找到倒数第k个结点,我们可以定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动,从第k步开始

2016-01-16 21:01:37 891 7

原创 调整数组顺序使奇数位于偶数之前

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 方法一:快排算法的思想,选择一个枢轴,该枢轴把数组分成前后两半部分,使得前半部分的数值小于枢轴值,后半部分的数值大于枢轴值。如果我们按照此思想,使得奇数位于前半部分,偶数位于后半部分。我们只需要扫描一次数组就可以。时间复杂度为o(n)。代码如下:#includeu

2016-01-16 20:35:42 324

原创 在o(1)时间内删除链表中结点

题目:给定单向链表的头指针和一个结点指针,定义一个函数在o(1)时间删除该结点。 解析:我们要删除结点i,先把i的下一个结点j的内容复制到i,然后把i的指针指向结点j的下一个结点。此时再删除结点j,效果刚好是把结点i给删除了。如果要删除的结点位于链表的尾部,那么他就没有下一个结点,我们仍然需要从链表的头结点开始,顺序遍历得到该结点的前序结点,并完成删除操作。如果删除的结点位于头结点,我们

2016-01-16 20:06:10 272

原创 打印1到最大的n位数

题目:输入数字n,按照顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1、2、3一直到最大的3位数即999。 解析:我们很容易写出以下的代码,当我们输入的n很大的时候,我们求得的最大n位数不能用int类型或者long long类型表示时,以下代码将会有缺陷。void printOneToMax(int n){ int number= 1; for(int i = 0; i

2016-01-16 19:36:37 377

原创 数值的整数次方

题目:实现函数double power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解析:我们可以很快就写出一下的代码。不过遗憾的是,写得快不一定就对,如果输入的指数(exponent)小于1即是零和负数的时候怎么办。下面代码只考虑指数为正数的情况。double power(double base,int exp

2016-01-12 15:38:28 404

原创 二分查找(递归与非递归)

二分查找的思想是:我们设置三个指针low,mid和high,low指向数组的第一个元素,mid指向数组中间元素,high指向数组最后一个元素。每次用待查元素和中间元素比较,如果待查元素比中间元素小,那么我们更新high = mid - 1,如果待查元素比中间元素大,那么我们更新low = mid + 1,如果待查元素和中间元素相等,那么我们返回mid。重复上述过程,直到检索成功或检索区间长度为0(

2016-01-06 11:22:02 508

原创 递归与非递归遍历二叉树(前序、中序、后序)

二叉树前序遍历:(1)访问根结点(2)按照前序遍历左子树(3)按照前序遍历右子树递归实现前序遍历的代码:void preOrder(BiTNode *root){ if(root != NULL) { coutval<<endl; preOrder(root->lchild); preOrder(root->rchild); }}二叉树中序遍历(1)按照中序遍

2016-01-05 21:54:35 849 2

原创 无头结点链表的创建及删除

链表是一种动态数据结构,是因为在创建链表时,无须知道链表的长度,当插入一个节点时,我们只需要为新节点分配内存,然后调整指针的指向来确保新节点被插入到链表中。内存分配不是在创建链表时一次性完成,而是每添加一个节点分配一次内存,由于没有闲置的内存,链表的空间效率比数组高,我们要向链表的末尾插入一个元素,函数原型为void appendNode(ListNode **pHead,int val),我们要

2016-01-05 11:52:58 1607 1

原创 替换空格

题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"we are happy",则输出"we%20are%20happy"。 方法一:创建新的字符串并在新的字符串上做替换操作,那么我们自己可以分配足够多的内存,用来容纳新的字符串。时间复杂度为o(n)。#includeusing namespace std;//替换空格为%20char* replace(char

2016-01-05 10:25:02 303

原创 自定义简化版本的vector容器

实现一个简单的vector容器,容器中的元素只能容纳整数,默认初始化时,容器的大小为1,且把容器中每个元素的值初始化为0,当向容器中添加元素时,如果此时容器已满,则申请一个新的容器,其大小为原来容器的两倍,并把原先容器中的元素赋值到新容器中,然后再添加新的元素,最后把原来容器的空间给释放。两个容器之间可以相互拷贝,且可以用一个容器构造另一个新的容器。可以用[]操作符访问容器中的元素。其代码如下:#

2016-01-01 18:03:07 319

原创 自定义string类

自定义一个简化版本的string类,其中成员函数包括:(1)构造函数。(2)赋值构造函数。(3)赋值操作符(=)。(4)重载操作符([])。(5)比较函数。(6)析构函数。非成员函数只有重载操作符MySting();//无参数构造函数MyString(char *pData);//带参数的构造函数const char& operator[](unsigned int len)const;//重

2016-01-01 16:18:48 481

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除