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个回答  推荐于2016-05-26
单链表的创建与插入
#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);
}
}
望采纳本回答被提问者和网友采纳

c语言实现头插法创建包含5各节点的单链表,输出链表中的最后一个元素_百...
typedef struct node { int x;node *next;}L;int main(){ L *head,*p;int i;head=(L *)malloc(sizeof(L));head->next=NULL;for(i=0;i<5;i++){ p=(L *)malloc(sizeof(L));p->x=i;p->next=head->next; \/\/用头插法插入节点 也就是说顺序颠倒 head->next=p;} ...

C语言,单链表和节点插入问题?
答案如下

c语言链表多次插入新节点的问题
前面的都没什么问题,问题在insert函数中。首先当头指针为空的情况下也就是if(b==null)只要把插入的节点加上就是你下面的b=s3;s3->next=null;而后面的部分则不执行,改成下面这样:if(b==null){ b=s3;s3->next=null;} else { ……} 还有我不明白(s4->num!=s1->num)你这里判断这两个...

C语言编程新建一个链表,包含5个以上结点
rear->next = temp; \/\/ 使前一个结点指向新增结点 rear = temp; \/\/ 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)} rear->next = NULL; \/\/ 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)return head; \/\/ 返回头结点 } ...

c语言链表插入法求解下列问题?
一、链表创建:根据输入的数字,动态创建任意多个节点插入链表。(题目规定n<=40,如不想使用malloc动态申请内存,需直接定义最大上限40个节点)。二、链表排序:交换节点内容(不是地址),保留链表指针的值(*next的值)。三、打印链表:利用链表指针遍历链表。四、对动态申请的链表地址空间释放(在本...

在单链表中,在偶数位插入新节点?写出算法思想以及相应的代码?_百度...
在单链表中插入新节点的算法思想是:1.创建一个新节点,包含要插入的数据。2.从链表的头部开始遍历链表,找到要插入位置的前一个节点。3.将新节点的 next 指针指向前一个节点的 next 指针所指向的节点。4.将前一个节点的 next 指针指向新节点。下面是用 Java 实现的代码:

【数据结构】单链表的建立——头插法与尾插法
头插法:每个节点:只需要移动一下它本身和头指针的指向即可,不需要移动其他的元素,实际也和其他的元素没有关系,所以单个节点的时间复杂度是O(n)。整个链表:设单链表的总长度为n,在一个已有N个元素的单链表中插入元素,如果插入位置为x那么需要找到它的前驱才可以插入,最坏时间复杂度为O(n...

写出建立包含n个元素结点的带头结点单链表的算法\\\\\\c语言版
\/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空。*\/ { head=malloc(sizeof(ListNode));\/*为头结点分配一个存储空间*\/ if(head==NULL){ return;} head->next = NULL; \/*将单链表的头结点指针域置为空*\/ } int ListEmpty(ListNode* head)\/*判断单链表是否为空,...

怎样用C语言实现三张链表之间的相互插入和查找
1.链表 其实就是在内存里建立,一块块小空间,再把这些空间,连接在一起。2.创建一个内存空间(链),可以用(malloc,calloc)函数。3.链表的形成需要 首先定义,起始和结束 空间。根据一个链要包含什么样的信息,决定其空间大小。4.起始链要包含下一个链的地址,中间断的链要包含,自己前面和后面链...

用C语言代码创建一个单链表,包含(1)创建链表(2)求表长(3)链表的查找...
}\/\/ 创建链表LinkList CreateList() {int data;pNode p;LinkList head = GetEmptyList();p = head;printf("输入一个整数('q' to quit):");while(scanf("%d",&data) == 1) {p->next = (pNode)malloc(sizeof(struct list));p->next->data = data;p = p->next;printf("输入...

相似回答