为什么到了main函数调用时就不对了,运行出来的结果是错的
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
} node;
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)
{
node *p;
node *q;
p=head;
q=head;
while(p->next!=0)
{
if(p->next->next==0)
{
mid1=q;
mid2=q->next;
break;
}
else
{
mid=q->next;
}
p=p->next->next;
q=q->next;
}
printf("%d\n",mid,mid1,mid2);
}
void main()
{
node* list;
node* mid;
node* mid1;
node* mid2;
//创建链表,把链表做好,把结构体,指针都定义好;
list = CreateList(10);
searchmid(list, mid,mid1,mid2);
//找中间结点
printf("%d\n",mid);
//显示出来中间结点
}
链表
struct
malloc
sizeof
printf .分享到:
对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除
管理 回复次数:10
schlafenhamster
schlafenhamster 等级:
结帖率:100%
3 #1 得分:40 回复于: 2013-08-11 08:07:21
“void searchmid(node *head,node *mid,node *mid1,node *mid2)”
这个函数要用 双星 指针 即:
void searchmid(node *head,node **mid,node **mid1,node **mid2)
因为 head 不变,mid,mid1,mid2的 值 都要改变的。
关注CSDN论坛微博 送CSDN积分大礼包对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除
管理
c8yijun
c8yijun 等级:
结帖率:50% #2 得分:0 回复于: 2013-08-11 12:28:27
为什么修改后的程序输出的结果经过检查还是错误的呢?
【免积分下载】2013上半年超人气精华资源汇总对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除
管理
schlafenhamster
schlafenhamster 等级:
结帖率:100%
3 #3 得分:0 回复于: 2013-08-11 12:30:55
看看“修改后的程序”
独一无二的职位:开源社区经理 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除
管理
c8yijun
c8yijun 等级:
结帖率:50% #4 得分:0 回复于: 2013-08-11 12:55:29
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
} node;
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)
{
node *p;
node *q;
p=head;
q=head;
while(p->next!=0)
{
if(p->next->next==0)
{
*mid1=q;
*mid2=q->next;
break;
}
else
{
*mid=q->next;
}
p=p->next->next;
q=q->next;
}
printf("%d\n",mid,mid1,mid2);
}
void main()
{
node* list;
node* mid;
node* mid1;
node* mid2;
//创建链表,把链条做好,把结构体,指针都定义好;
list = CreateList(3);
searchmid(list, &mid,&mid1,&mid2);
//找中间结点
printf("%d\n",mid);
//显示出来中间结点
}
对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除
管理
schlafenhamster
schlafenhamster 等级:
结帖率:100%
3 #5 得分:0 回复于: 2013-08-11 17:02:24
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
} node;
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->data=5;
}
p->next=NULL;
return head;
}
void searchmid(node *head,node **mid,node **mid1,node **mid2)
{
node *p;
node *q;
p=head;
q=head;
while(p->next!=0)
{
if(p->next->next==0)
{
*mid1=q;
*mid2=q->next;
break;
}
else
{
*mid=q->next;
}
p=p->next->next;
q=q->next;
}
printf("mid=0x%08X mid1=0x%08X mid2=0x%08X\n",mid,mid1,mid2);
}
void main()
{
node* list;
node* mid;
node* mid1;
node* mid2;
//创建链表,把链条做好,把结构体,指针都定义好;
list = CreateList(3);
searchmid(list, &mid,&mid1,&mid2);
//找中间结点
printf("%d\n",mid->data);
//显示出来中间结点
}