口碑好网站建设在哪里,杭州哪家做网站,襄县网站建设,宜昌市建设监理协会网站向现有链表中插入结点#xff0c;根据插入位置的不同#xff0c;可分为以下 3 种情况#xff1a;
插入到链表的头部#xff0c;作为新的链表中第一个存有数据的结点#xff08;又称为”首元结点”#xff09;#xff1b;插入到链表中某两个结点之间的位置#xff1b;插… 向现有链表中插入结点根据插入位置的不同可分为以下 3 种情况
插入到链表的头部作为新的链表中第一个存有数据的结点又称为”首元结点”插入到链表中某两个结点之间的位置插入到链表的最末端的位置
使用头插法和尾插法可分别解决第 1 和第 3 种情况但是无法解决第 2 种情况所以本节给大家一段通用代码可有效解决所有链表结点插入的问题。(分为节点前和节点后)
节点后插入
节点后插入分为以下几个步骤
1.通过查找代码找到指定节点
2.定义一个新节点将指定节点的下一个节点地址赋给新节点
3.将新节点地址赋给指定节点的下一个节点。
定义一个查找函数
int searchLink(struct Test *head,int Data)
{while(head ! NULL){if(head-Data Data)//输入的节点值刚好等于链表节点值{return 1;}head head-next;}return 0;
}定义一个节点后插入函数
int insertFronBehind(struct Test *head,int Data,struct Test *new)
{struct Test *p head;while(p ! NULL){if(p-Data Data){new-next p-next;//指定节点的下一个节点地址赋给新节点p-next new;//将新节点地址赋给指定节点的下一个节点return 1;}pp-next;}return 0;
}主函数中创建一个新节点并调用以上两个函数 struct Test new{99,NULL};printLink(t1);puts(after insert behind);insertFronBehind(t1,3,new);printLink(t1);这里是在原链表第三个节点处插入一个99编译结果如下 节点前插入
节点前插入分为以下两种情况
第一种是链表头插入则链表头插入的地址改变了整个链表的地址所以链表头插入的地址可以作为整个链表首地址同时往下延申即可就可以得到链表中的所有数据
第二种是链表中插入链表中插入的步骤是
1.若p节点的下一个节点数据等于要插入的节点数据则将插入的节点地址赋给新节点
2.将p节点地址赋给新节点。
定义一个查找函数
int searchLink(struct Test *head,int Data)
{while(head ! NULL){if(head-Data Data)//输入的节点值刚好等于链表节点值{return 1;}head head-next;}return 0;
}定义一个节点前插入函数(分两种情况)
struct Test* insertFromfor(struct Test *head,int Data,struct Test *new)
{struct Test *p head;if(p-Data Data)//p的地址刚好的输入的地址即链表头插入{new-next head;return new;}while(p-next ! NULL)//p的下一个不为空指针如果为空指针就跳出循环判断是不是在链表头{if(p-next-Data Data)//p的下一个节点数据等于插入节点数据{new-nextp-next;//p下一个节点地址给新节点p-nextnew;//新节点地址给pprintf(Insert ok\n);return head;}pp-next;}printf(No this data%d\n,Data);return head;
}主函数创建一个新节点调用上面两个函数 struct Test new1{111,NULL};struct Test *headNULL;head t1;//若为链表头则需要作为链表首地址若不为链表头就从t1正常输出printLink(head);headinsertFromfor(head,3,new);printLink(head);这里是在3前面插入一个111编译结果如下