node *CreateList(int n)
{ node *head,*p,*s;
int i;
if( n <1 || n >10000)
return 0;
head =(node*)malloc(sizeof(node));
p = head;
for(i = 0; i < n-1; i++)
{ s=(node*)malloc(sizeof(node));
// scanf("%d",&s->data);
p->next =s;
p = s;
} p->next=NULL;
return head;
}
void searchmid(node *head,node **mid,node **mid1,node **mid2)
{
int a;
node *p;
node *q;
p=head;
q=head;
a=0;
while(p->next!=0)
{
if(p->next->next==0)
{
a=2;
*mid1=q;
*mid2=q->next;
break;
}
else
{
*mid=q->next;
}
p=p->next->next;
q=q->next;
}
if(a==2)
{
printf("%x %x\n",*mid1,*mid2);
}
else
{
printf("abc%x\n",*mid);
}
}
void main()
{
node* list;
node* tempList;
node* mid;
node* mid1;
node* mid2;
int number;
int i;
number = 1;
//创建链表,把链条做好,把结构体,指针都定义好;
list = CreateList(number);
searchmid(list, &mid,&mid1,&mid2);
for ( i = 0; i < number; i++)
{
tempList = list;
list = list->next;
free(tempList);
}
return;
//找中间结点
//显示出来中间结点
}
这是进行修改后的程序,但就是number等于1时有问题,number为其他值都符合了。。忘记告诉你了,这个题目是一个长度不定的单链表只遍历一次求出其中间结点的位置