|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct LNode
- {
- int data;
- struct LNode *next;
- }LNode;
- /************ bug start ************/
- void Init_List(LNode *L)
- {
- L = (LNode *)malloc(sizeof(LNode));
- L->next = NULL;
- }
- /************* bug end *************/
- LNode* create_node(LNode *pre, int value)
- {
- LNode *p = (LNode *)malloc(sizeof(LNode));
- pre->next = p;
- p->data = value;
- p->next = NULL;
- return p;
- }
- int main()
- {
- printf("请输入一串数字,中间以空格分隔开,以一个任意不大于0的整数结束:\n");
- int n;
- LNode *L = NULL, *p, *pre;
- L = (LNode *)malloc(sizeof(LNode));
- L->next = NULL;
- //Init_List(L);
- p = L;
- while(1)
- {
- scanf("%d", &n);
- if(n <= 0)
- break;
- LNode *q = create_node(p, n);
- p = q;
- }
- p = L->next;
- while(p != NULL)
- {
- if(p->next != NULL)
- printf("%d->", p->data);
- else
- printf("%d", p->data);
- p = p->next;
- }
- printf("\n排序后的结果为:(从小到大排列)\n");
- pre = L->next; p = L->next->next;
- //LNode *t;
- while(p)
- {
- int x = p->data;
- if(x >= pre->data)
- {
- pre = p;
- p = p->next;
- continue;
- }
- else
- {
- LNode *t = L->next, *tpre = L;
- while(t->data < x)
- {
- tpre = t;
- t = t->next;
- }
- pre->next = p->next;
- tpre->next = p;
- p->next = t;
- p = pre->next;
- }
- }
- p = L->next;
- while(p != NULL)
- {
- if(p->next != NULL)
- printf("%d->", p->data);
- else
- printf("%d", p->data);
- p = p->next;
- }
- return 0;
- }
复制代码
其他的操作都没问题,但是每次用个函数构造头结点的话就不行,会运行超时。我用的是codeblocks。
如果不用函数构造头结点,直接
- LNode *L =(LNode *) malloc(sizeof(LNode));
- L->next = NULL;
复制代码 这样写就没问题。
我写这个程序是想找到函数的问题在哪里,结果这样运行的时候发现一直都是输出Create head node failed,请问到底有啥问题啊
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct LNode
- {
- int data;
- struct LNode *next;
- }LNode;
- void Init_List(LNode *L)
- {
- printf("1.Enter function success!\n");
- L = (LNode *)malloc(sizeof(LNode));
- printf("2.Create head node success!\n");
- L->next = NULL;
- printf("3.Init success!\n");
- }
- int main()
- {
- LNode *L = NULL;
- printf("Before the entrance.\n");
- Init_List(L);
- printf("Quit function success!\n");
- if(L == NULL)
- printf("Create head node failed!\n");
- return 0;
- }
复制代码
你想要改变的是L的指向,因此在传入L指针的时候应该传入指向L指针的指针
像这样 Init_List(&L)
不然你传直接传L进去,L在子函数里的改变并不会影响到main函数里面的L,子函数结束后L依然指向NULL
void Init_List(LNode **L)
Init_List(&L);
|
|