数组循环左移
题目要求:
Code:
#include <stdio.h>
#include <stdlib.h>
struct list {
int data;
struct list *next;
};
struct list *randlist(struct list *l, int n)
{
struct list *h, *s, *p;
h = (struct list *)malloc(sizeof(struct list));
h = l;
s = l;
while(n) {
p = s;
scanf("%d", &s->data);
s = (struct list *)malloc(sizeof(struct list));
p->next = s;
n --;
}
p->next = NULL;
return p;
}
struct list *dolist(struct list *l, struct list *e, int k)
{
int i = 0;
struct list *p, *h, *head;
p = l;
h = l;
head = l;
while(p) {
i ++;
if(i == k) {
head = p->next;
p->next = NULL;
e->next = h;
break;
}
p = p->next;
}
return head;
}
void getlist(struct list *l)
{
struct list *p = l;
printf("%d", p->data);
p = p->next;
while(p) {
printf(" %d", p->data);
p = p->next;
}
}
int main(void)
{
int i, n, k;
scanf("%d %d", &n, &k);
while(k >= n) {
k -= n;
}
struct list *h, *e, *l;
l = (struct list *)malloc(sizeof(struct list));
e = randlist(l, n);
h = dolist(l, e, k);
getlist(h);
return 0;
}