#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#include<malloc.h>
struct link
{
int data;
struct link *next;
};
void delMiddle(link *head)
{
if(head == NULL)
return;
else if(head->next == NULL)
{
delete head;
return;
}
else
{
link *low = head;
link *fast = head->next;
while(fast != NULL && fast->next != NULL)
{
fast = fast->next->next;
if(fast == NULL)
break;
low = low->next;
}
link *temp = low->next;
low->next = low->next->next;
delete temp;
}
}
void print(link *head)
{
if(head == NULL)
return;
else if(head->next == NULL)
{
delete head;
return;
}
else
{
link *plink = head;
while(plink != NULL )
{
printf("%d\t",plink->data);
plink = plink->next;
}
printf("\n");
}
}
int main()
{
struct link *head,*l;
struct link *s;
head = (link*)malloc(sizeof(link));
head->data=0;
head->next = NULL;
l = head;
int n;
scanf("%d",&n);
for(int i=1; i<n; i++)
{
s = (link*)malloc(sizeof(link));
s->data = i;
s->next = NULL;
l->next= s;
l = l->next;
}
print(head);
delMiddle(head);
print(head);
return 0;
}
Test Case
n=0,1,2
n>2 奇数 n=9
0 1 2 3 4 5 6 7 8
0 1 2 3 5 6 7 8
n>2 偶数 n=10
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 6 7 8 9