408代码汇总
1. 2009年
已知一个带有表头结点的单链表,结点结构为:
假设该链表只给出了头指针 list。在不改变链表的前下,请设计一个尽可能高效的算法,查找链表中倒数第
k 个位置上的结点(k 为正整数)。若查找成功,算法输出该结点的 data 域的值,并返回 1;否则,只返回
0。
算法思想:使用p,q两个指针,p指针先移动扫描k个指针,之后q再与p同步移动,当p指向最后一个节点
时,q正好指向倒数第k个节点
2. 2010年
设将 n(n>1)个整数存放到一维数组 R 中。试设计一个在时间和空间两方面都尽可能高效的算法。将 R 中保
存的序列循环左移 p(0<p<n)个位置,即将 R 中的数据由(X0, X1, , Xn-1)变换为(Xp, Xp+1, , Xn-1, X0,
X1, , Xp-1)。
算法思想:先将R中前p个元素逆置,再将剩下的元素逆置,最后将R中所有的元素再整体做一次逆置即可
int SearchRearK(LNode *L, int k)
{
int count=0;//用来计数
LNode *q=L->link;
while(p!=NULL)
{
if(count<k)
count++;
else
q=q->link;//当count等于开始,q和p同步向后移动
p=p->link;
}
if(count<k)
return 0;//如果链表节点个数小于k
else
{
printf("%d",q->data);
return 1;
}
}
void Reverse(int R[],int l,int r)
{
int i,j;
int temp;
for(i=l,j=r;i<j;++i,--j)
{
temp=R[i];
R[i]=R[j];
评论0