丶長安先生 2021-05-16 11:10 采纳率: 37.5%
浏览 35
已采纳

创建单链表后,在某一个位置插入新元素,然后重新输出,为什么和原先的输入值不一样。

这是我的输入和输出,原先输出的是2,插入后输出就变成50了。

 这是代码段

#include"stdio.h"
#include"stdlib.h"
typedef struct node
{
    int date;
    struct node*next;
}node,*link;
link fun(link t)
{
    node *s;
    int c;
    int flag=1;
    while(flag)
    {
        c=getchar();
        if(c!='*')
        {
            s=(node*)malloc(sizeof(node));
            s->date=c;
            s->next=t->next;
            t->next=s;
        }
        else
            flag=0;
    }
    return t;
}
link ins(link t, int i,char e)
{
    node *pre,*s;
    int k;
    pre=t;k=0; /*从头开始查找第i-1个节点*/
    while(pre!=NULL&&k<i-1)
    {
        pre=pre->next;
        k=k+1;
    }
    if(pre==NULL)
    {
        printf("插入位置不合理!");
    }
    s=(node*)malloc(sizeof(node));
    s->date=e;
    s->next=pre->next;
    pre->next=s;
    printf("success\n");
    return t;
}
void main()
{
    link t;
    t=(link)malloc(sizeof(node));
    t->next=NULL;
    node *p;
    t=fun(t);
    p=t->next;
    while(p!=NULL)
    {
        printf("%c\n",p->date);
        p=p->next;
    }
    int e;
    printf("请输入插入的字符:");
    scanf("%d",&e);
    int i;
    printf("\n请输入要插入的字符的位置i:");
    scanf("%d",&i);
    if(0<=i)
    {
        node *z;
        t=ins(t,i,e);
        z=t->next;
        while(z!=NULL)
        {
            printf("%d\n",z->date);
            z=z->next;
        }
    }
    else
        printf("插入位置错误");

}

请老师指点一下。

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-05-16 12:27
    关注

    前面的输出是printf("%c\n",p->date);插入后的输出是printf("%c\n",z->date);

    你输入3后按照char类型读入,你之前输入的2按%d输出就是50。

    输入插入字符的地方修改一下:

    printf("请输入插入的字符:");
        scanf("%d",&e);
        e = e +48;  //这样转换一下

    代码修改后如下。如有帮助,请采纳一下,谢谢:

    
    
    #include"stdio.h"
    #include"stdlib.h"
    typedef struct node
    {
    	int date;
    	struct node*next;
    }node,*link;
    link fun(link t)
    {
    	//找到最后一个节点
    	node* tail = t;
    	while(tail->next != NULL)
    		tail = tail->next;
    
    	node *s;
    	int c;
    	int flag=1;
    	while(flag)
    	{
    		c=getchar();
    		if(c!='*')
    		{
    			s=(node*)malloc(sizeof(node));
    			s->date=c;
    			s->next=NULL;
    			tail->next=s;
    
    			tail = s;
    		}
    		else
    			flag=0;
    	}
    	return t;
    }
    link ins(link t, int i,char e)
    {
    	node *pre,*s;
    	int k;
    	pre=t;k=0; /*从头开始查找第i-1个节点*/
    	while(pre!=NULL&&k<i-1)
    	{
    		pre=pre->next;
    		k=k+1;
    	}
    	if(pre==NULL)
    	{
    		printf("插入位置不合理!");
    	}
    	s=(node*)malloc(sizeof(node));
    	s->date=e;
    	s->next=pre->next;
    	pre->next=s;
    	printf("success\n");
    	return t;
    }
    void main()
    {
    	link t;
    	t=(link)malloc(sizeof(node));
    	t->next=NULL;
    	node *p;
    	t=fun(t);
    	p=t->next;
    	while(p!=NULL)
    	{
    		printf("%c\n",p->date);
    		p=p->next;
    	}
    	int e;
    
    	printf("请输入插入的字符:");
    	scanf("%d",&e);
    	e = e +48;  //这样转换一下
    	int i;
    	printf("\n请输入要插入的字符的位置i:");
    	scanf("%d",&i);
    	if(0<=i)
    	{
    		node *z;
    		t=ins(t,i,e);
    		z=t->next;
    		while(z!=NULL)
    		{
    			printf("%c\n",z->date);
    			z=z->next;
    		}
    	}
    	else
    		printf("插入位置错误");
    
    
    	getchar();
    	getchar();
    	return;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染