c语言单链表链表如何插入多个节点

2025年03月13日 01:48
有2个网友回答
网友(1):

如果已知一个节点指针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;
}

网友(2):

单链表的创建与插入
#include
#include
#include
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);
}
}
望采纳