您的位置:首页 > Web前端

剑指offer(五)

2015-11-07 09:43 274 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.打印1到最大的N位数(对N个位置0到9进行全排列)</span>


#include <iostream>
#include<string>
using namespace std;

void p(string s,int n)
{
string s1;
s1.resize(n+1);
for (int i=0;i<n+1;i++) s1[i]='0';
if(s==s1) cout<<'0'<<' ';
else
{
int i=0;
while (s[i]=='0') i++;
while(i<=n)
{
cout<<s[i];
i++;
}
cout<<' ';

}

}
void pp(string s1,int n,int index)
{
if(index==n-1)
{
p(s1, n);
return;
}
for(int i=0;i<10;i++)
{
s1[index+1]=i+'0';
pp(s1,n,index+1);
}
}
void p0tomaxn(int n)
{
string s1;
s1.resize(n+1);
s1[0]='0';
for (int i=0;i<10;i++)
{
s1
=i+'0';
pp(s1,n,0);
}

}
int main()
{
p0tomaxn(2);
return 0;
}


2.在O(1)时间里删除结点(调换结点的两个方式,值调换和指针调换)

<span style="font-size:18px;">#include <iostream>
#include<list>
using namespace std;
void delete_list(list<int> &list1,list<int>::iterator ite)
{
if(ite==list1.begin()&&(ite++)==list1.end()) list1.clear();//只有一个结点
else if(ite==list1.end())//是尾结点
{
ite--;
list1.erase(ite);
}
else
{
int temp=*ite;
ite--;
*ite=temp;
ite++;
list1.erase(ite);

}
}
int main()
{
int a[]={0,1,2,3,4,5};
list<int>list1(a,a+6);
list<int>::iterator ite=list1.end()--;
delete_list(list1,ite);
return 0;
}
</span>
还是用了list,思路还在吧。。

3.调整数组顺序使奇数位于偶数之前

<span style="font-size:18px;">#include <iostream>
using namespace std;
void reorder(int *a,int n)
{
int i=0,j=n-1;
while (i<j)
{
if(a[i]%2==1) i++;
if(a[j]%2==0) j--;
if(a[i]%2==0&&a[j]%2==1)
{
swap(a[i],a[j]);
i++;
j--;
}
}

}
int main()
{
int a[]={0,1,2,3,4,5};
int len=sizeof(a)/sizeof(a[0]);
reorder(a,len);
return 0;
}</span>

4.链表中倒数第K个数(遍历链表一次,设置两个节点指针)

#include <iostream>
using namespace std;
char state=0;//设置状态
struct List
{
int data;
List* next;
List(int num) :data(num),next(NULL){};
};
List* init_list(int *a,int n)
{
List *head=new List(a[0]);
List *q=head;
for (int i=1;i<n;i++)
{
List *p=new List(a[i]);
q->next=p;
q=p;
}
return head;

}void find_lastKth(List*head,int k)
{
if(k<=0||!head)
{
state=1;
return;
}
List *p,*q;
p=head,q=head;
int i=0;
for ( ;i<k-1&&p->next;i++) p=p->next;
while (p->next)
{
i++;
q=q->next;
p=p->next;
}
if(i<k-1)
{
state=1;
return;
}
cout<<q->data;
}
int main()
{
int a[]={0,1,2,3,4,5};
int len=sizeof(a)/sizeof(a[0]);
List *head=init_list(a,len);
find_lastKth(head,7);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: