还是我!关于链表插入的一个问题。

鱼酥不是叔 2019-02-19 06:18:11
#include<stdio.h>
#include<stdlib.h>
typedef struct nodelist
{
int data;
struct nodelist* next;
}node;
node* list(int n);
node* insert(int n,node* head);
int main
{
int n,i;
node *list1;
scanf("%d",&n);
list1=list(n);
for(i=n;i>0;i--)//while(list1)
{
printf("%d\n",list1->data);
list1=list1->next;
}
list1=insert(n,list1);
for(i=n;i>0;i--)
{
printf("%d\n",list1->data);
list1=list1->next;
}
return 0;
}
node* list(int n)
{
node *head;
node *p,*tem;
int i,k;
head=(node *)malloc(sizeof(node));
head->next=NULL;
scanf("%d",&k);
head->data=k;
tem=head;
for(i=1;i<n;i++)//for(i=0;i<n-1;i++)
{
p=(node *)malloc(sizeof(node));
scanf("%d",&k);
p->data=k;
tem->next=p;
tem=p;
}
p->next=NULL;
return head;
}
node* insert(int n,node* head)
{
int k,i,l;
node *p=head;
printf("please input which one you want to insert before it:");
scanf("%d",&k);
for(i=1;i<=n;i++)
{
if(i==k-1)
{
node *tem=(node *)malloc(sizeof(node));
scanf("%d",&l);
tem->data=l;
tem->next=p->next;
p->next=tem;
}
p=p->next;
}
return head;
}
代码已经过本人调试,无错误和警告。但在进行第二个插入函数到if语句后就无法执行了。萌新求解答!谢谢
...全文
144 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
鱼酥不是叔 2019-02-22
  • 打赏
  • 举报
回复
引用 2 楼 或✘许✔吧 的回复:

哇,好的。谢谢大佬
名字在哪啊 2019-02-19
  • 打赏
  • 举报
回复
名字在哪啊 2019-02-19
  • 打赏
  • 举报
回复
这里函数输出链表后list1已经不是指向链表头了已经指向空
list1=list(n);
for(i=n;i>0;i--)//while(list1)
{
printf("%d\n",list1->data);
后面调用插入函数的时候
list1=insert(n,list1);这里用list1就出错了
应该在前面再定义一个指针把list1赋给list2
调用的时候以list2做形参
node *list2;
list2=list1;
for(i=n; i>0; i--) //while(list1)
{
printf("%d\n",list1->data);
list1=list1->next;
}
list1=insert(n,list2);

还有就是你后面输出插入后的链表的时候for(i=n+1; i>0; i--)
插入一个那么链结个数就多了一个
n就要加一

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧