不带头节点单链表求解(C语言)

代码如下,但运行什么也没有;纯属小白,求大神指教

 

#include<stdio.h>
#include<malloc.h>
typedef int datatype;
typedef struct Node
{
        datatype data;
        struct Node *next;
}LNode;
void ListInitiate(LNode **fakeh)
{
        *fakeh=NULL;
}
int ListGet(LNode *fakeh,int i,datatype *x)
{
        int j = 0;
        LNode *p = fakeh;
        if (i<0)
        return 0;
        else
        {
        while (p->next!=NULL&&j<i)
        {
            j++;
            p = p->next;
        }
        }
        if (j!=i)
        {
                printf("插入位置错误");
                return 0;
        }
        *x=p->data;
        return 0;
}
int ListInsert(LNode *fakeh,int i,datatype x)
{
        LNode *p=fakeh;
        LNode *q,*s;
        int j=0;
        if(i<0)
        {
                printf("插入位置出错");
                return 0;
        }
        s=(LNode *)malloc(sizeof(LNode));
        if(i==0)
        {
                s->next=p;
                fakeh=s;
        }
        else
        {
                while(p->next!=NULL&&j<i-1)
                {
                        p=p->next;
                        j++;
                }
                if(j!=i-1)
                {
                        printf("插入位置错误");
                        return 0;
                }
                else
                {
                        q=p->next;
                        s->next=q;
                        p->next=s;
                }
        }
}
void main()
{
        LNode *fakeh;
        datatype x;
        int i;
        ListInitiate(&fakeh);
        for(i=0;i<10;i++)
        {
                ListInsert(fakeh,i,i++);
        }
        for(i=0;i<10;i++)
        {
                ListGet(fakeh,i,&x);
                printf("%d",x);
        }
}
 

建议写一些打印语句先调试一下内部变量的变化,学会调试也是写程序很重要的技能之一哦,不行再沟通

最好用vs来调试,很快就能看出问题。

你看看79行传入函数里的指针fakeh ,没有初始化,指针没有指向具体的内存地址导致报错了。

void main()
{
	LNode fakeh;
	datatype x;
	int i;
	//ListInitiate(&fakeh);
	for (i = 0; i < 10; i++)
	{
		ListInsert(&fakeh, i, i++);
	}
	for (i = 0; i < 10; i++)
	{
		ListGet(&fakeh, i, &x);
		printf("%d", x);
	}
}

你那初始化的函数没啥用,LNode fakeh; 这样才能申请LNode需要的内存

在传参的时候加个&获取实例fakeh的地址就行。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html