c语言单链表链表如何插入多个节点
建立一个单链表后如何连续插入多个结点,最好是通用一点创建链表的方法,方便以后删除结点,双向链表什么的,要可以运行的完整代码,大神求救!!谢谢~...
建立一个单链表后如何连续插入多个结点,最好是通用一点创建链表的方法,方便以后删除结点,双向链表什么的,要可以运行的完整代码,大神求救!! 谢谢~
展开
展开全部
如果已知一个节点指针pre和一个节点指针cur,要把cur插入到pre节点之后,很显然要保证链表不会断开而丢失后面的节点,要先把后面的节点指针(指向lat的指针)保存下来,即有cur->next = pre->next,然后把cur连接的一串链表连接到pre后面,即pre->next = cur;
上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。
在这种情况下,有两点要注意:
1,链表是否为空链表
2,要插入的节点是不是空指针。
代码实现:
//向单链表中插入一个节点(插入在链开始处)
//输入参数:单链表的头指针和要插入的节点指针
//输出参数:无
//返回值:指向单链表的头指针
SingleList* Insert(SingleList *head,SingleList *node)
{
if(node == NULL)
{
return head;
}
else if(head == NULL)
{
return node;
}
node->next = head;
head = node;
return head;
}
上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。
在这种情况下,有两点要注意:
1,链表是否为空链表
2,要插入的节点是不是空指针。
代码实现:
//向单链表中插入一个节点(插入在链开始处)
//输入参数:单链表的头指针和要插入的节点指针
//输出参数:无
//返回值:指向单链表的头指针
SingleList* Insert(SingleList *head,SingleList *node)
{
if(node == NULL)
{
return head;
}
else if(head == NULL)
{
return node;
}
node->next = head;
head = node;
return head;
}
展开全部
单链表的创建与插入
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Student
{
char num[10];//学号
char name[15];//姓名
struct Student*next;
}S;
void creat(S**head);
void insert(S**head,S*p0);
void main()
{
S*head,*p0;
head=NULL;
p0=(S*)malloc(sizeof (S));
puts("请输入要插入节点信息:");
scanf("%s %s",p0->num,p0->name);
puts("请输入节点信息:");
creat(&head);
puts("输出插入后的节点信息:");
insert(&head,p0);
puts("");
}
void creat(S**head)
{
S *p1,*p2;
p1=(S*)malloc(sizeof (S));
scanf("%s %s",p1->num,p1->name);
while(strcmp(p1->num,"11")>0)
{
if(*head==NULL)
*head=p1;
else
p2->next=p1;
p2=p1;
p1=(S*)malloc(sizeof (S));
scanf("%s %s",p1->num,p1->name);
}
p2->next=NULL;
}
void insert(S**head,S *p0)
{
S*p1,*p2;
if(*head==NULL)
return;
p1=*head;
while(strcmp(p1->num,p0->num)<0&& p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->num,p0->num)>=0)
{
if(*head==p1)
{
*head=p0;
p0->next=p1;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
for(p1=*head;p1!=NULL;p1=p1->next)
{
printf("%s %s\n",p1->num,p1->name);
}
}
望采纳
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Student
{
char num[10];//学号
char name[15];//姓名
struct Student*next;
}S;
void creat(S**head);
void insert(S**head,S*p0);
void main()
{
S*head,*p0;
head=NULL;
p0=(S*)malloc(sizeof (S));
puts("请输入要插入节点信息:");
scanf("%s %s",p0->num,p0->name);
puts("请输入节点信息:");
creat(&head);
puts("输出插入后的节点信息:");
insert(&head,p0);
puts("");
}
void creat(S**head)
{
S *p1,*p2;
p1=(S*)malloc(sizeof (S));
scanf("%s %s",p1->num,p1->name);
while(strcmp(p1->num,"11")>0)
{
if(*head==NULL)
*head=p1;
else
p2->next=p1;
p2=p1;
p1=(S*)malloc(sizeof (S));
scanf("%s %s",p1->num,p1->name);
}
p2->next=NULL;
}
void insert(S**head,S *p0)
{
S*p1,*p2;
if(*head==NULL)
return;
p1=*head;
while(strcmp(p1->num,p0->num)<0&& p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->num,p0->num)>=0)
{
if(*head==p1)
{
*head=p0;
p0->next=p1;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
for(p1=*head;p1!=NULL;p1=p1->next)
{
printf("%s %s\n",p1->num,p1->name);
}
}
望采纳
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询