#include<stdio.h>
#include<stdlib.h>
typedef int data_t;
typedef struct link{
data_t data;
struct link *next;
}link_t;
link_t *init_link(int num){
if(num <= 0)
return NULL;
link_t *lp = NULL;
link_t *newnode = NULL;
lp = malloc(sizeof(link_t));
lp->data = 1;
lp->next = lp;
while(num > 1){
newnode = malloc(sizeof(link_t));
newnode->data = num;
newnode->next = lp->next;
lp->next = newnode;
num--;
}
return lp;
}
link_t *move_once(link_t *lp,int num){
num -= 2;
while(num-- > 0){
lp = lp->next;
}
return lp;
}
void del_head(link_t *lp){
link_t *temp = NULL;
temp = lp->next;
lp->next = temp->next;
free(temp);
return;
}
link_t *del_link(link_t *lp,int num){
while(lp != lp->next){
lp = move_once(lp,num);//偏移
del_head(lp);//删除
lp = lp->next;//偏移
}
return lp;
}
void print_link(link_t *lp)
{
link_t *temp = lp;
do{
printf(" %d ",temp->data);
temp = temp->next;
}while(temp != lp);
printf("\n");
return;
}
int main()
{
link_t *lp = NULL;
lp = init_link(10);
print_link(lp);
lp = del_link(lp,3);
print_link(lp);
return 0;
}
#include<stdlib.h>
typedef int data_t;
typedef struct link{
data_t data;
struct link *next;
}link_t;
link_t *init_link(int num){
if(num <= 0)
return NULL;
link_t *lp = NULL;
link_t *newnode = NULL;
lp = malloc(sizeof(link_t));
lp->data = 1;
lp->next = lp;
while(num > 1){
newnode = malloc(sizeof(link_t));
newnode->data = num;
newnode->next = lp->next;
lp->next = newnode;
num--;
}
return lp;
}
link_t *move_once(link_t *lp,int num){
num -= 2;
while(num-- > 0){
lp = lp->next;
}
return lp;
}
void del_head(link_t *lp){
link_t *temp = NULL;
temp = lp->next;
lp->next = temp->next;
free(temp);
return;
}
link_t *del_link(link_t *lp,int num){
while(lp != lp->next){
lp = move_once(lp,num);//偏移
del_head(lp);//删除
lp = lp->next;//偏移
}
return lp;
}
void print_link(link_t *lp)
{
link_t *temp = lp;
do{
printf(" %d ",temp->data);
temp = temp->next;
}while(temp != lp);
printf("\n");
return;
}
int main()
{
link_t *lp = NULL;
lp = init_link(10);
print_link(lp);
lp = del_link(lp,3);
print_link(lp);
return 0;
}