一看懵逼了。
typedef struct lnode{
int data;
struct lnode*link;
}*linklist;
int len(linklist list){
linklist p;
int count = 0;
p=list->link;
while(p!=null){
p=p->link;
count++;
}
return count;
}
int searchn(linklist list,int k){
lenn = len(list); //求出整个链表长度
if (k > len) return 0; //如果是倒数第n+1/个,肯定是找不到
linklist p;
int count=1; /*计数器赋初值*/
int c = lenn-k+1; //第c个结点or倒数第k个结点
p=list->link; //第一个结点
while(count < c){
count++;
p = p->link;
}
printf(”%d”,q->data);/*查找成功*/
return(1);
}
void leftshift(int r[ ],int n,int p) {
int y[] = malloc(sizeof(int) * n)
//数组赋值
for(int i = 0; i < n; i++){
y[i] = r[i];
}
// 数组r的xp...xn-1的值移动到数组r前面;
for(int i = 0; i < n-p; i++){
r[i] = r[i+p];
}
// y数组的x0...xp-1复制到xn-1的后面
for(int i = 0; i < p; i++){
r[n-p+i] = y[i];
}
int m_search(int arr1[ ],int arr2[ ],int n){
int res[] = malloc(sizeof(int) * n* 2)
int i = 0;
int j = 0;
int k = 0;
while(i<n && j<n) {
if (ar1[i]<=ar2[j]) {
res[k++] = ar1[i++];
}
else {
res[k++] = ar2[j++];
}
while(i<len1) {
res[k++] = ar1[i++];
}
while(j<len2) {
res[k++] = ar2[j++];
}
}
return res[n/2];//返回中位数
}
typedef struct node{
char data;
struct node*next;
}snode;
snode*findlist(snode*str1,snode*str2){
int m,n;
snode*p,*q;
m=listlen(str1);/*求str1的长度。0(m)*/
n=listlen(str2);/*求str2的长度。0(n)*/
/*以下3个循环的时间复杂度为:0(max(m,n))*/
for(p=str1;m>n;m--) /*使p指向的链表与q指向的链表等长*/
p=p->next;
for(q=str2;m<n;n--) /*使q指向的链表与p指向的链表等长*/
q=q->next;
while(p->next!=null&&p->next!=q->next){
/*查找共同后缀起始点*/
p=p->next;/*两个指针同步向后移动*/
q=q->next;
}
return p->next;/*返回共同后缀的起始点*/
}
int listlen(snode*head){ /*求链表长度*/
int len=0:
while(head->next!=null){
len++;
head=head->next;
}
return len;
}