摘要:
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。代码如下:#include<iostream>using namespace std;struct Node{ int value; Node * link; Node() { value=0; link=NULL; }};//返回反向链表的头结点Node* Reserve(Node * head){ Node * pre,*next; pre=head; head=head->link; pre->link=NULL; while(head!=NULL) { next=head->link; he 阅读全文
摘要:
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路:将字符串看做AB两部分,将A反转,再将B反转,最后将反转后的A+反转后的B一起反转就OK了。#include<iostream>#include<assert.h>using namespace std;const int MAX=100;//反转从start到end的字符串svoid Reversal(int start,int end,c 阅读全文
摘要:
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现依次的数字,因为那些出现两次的数字全部在异或中抵消掉了。有了上面简单问题 阅读全文