链表的插入和删除
Posted 橙子果果
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的插入和删除相关的知识,希望对你有一定的参考价值。
链表的插入有前插和后插两种方法。
插入
后插:
1.静态创建一个链表。
2.声明一个指针p指向链表头结点。
3.判断链表的下一个是否为空,不为空执行循环。
4.遍历寻找需要插入的位置。(p = p->next)
5.将新节点的next指向插入位置的next。new->next = p->next.
6.插入位置的next执行新节点。 p->next = new.
int insertFromBehind(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;
}
p=p->next;
}return 0;
}
struct Test new = {100,NULL};
insertFromBehind(&t1,3,&new);
printLink(&t1);
链表的创建的结构体定义连接上节
链表的创建的结构体定义
前插:
前插要考虑插入的位置是否是插入头结点前。
如果是在头结点前插入新节点,就要改变表头。
1.声明一个指针p指向head
2.判断插入的节点是否是头结点。
p->data == data
3.遍历链表,判断链表节点的指向是否为空
p->next != NULL
4.找到需要插入的节点
if(p->next->data == data)
5.将新节点的next指向插入节点的next
插入节点的next指向新节点
new->next = p->next;
p->next = new;
6.如果是在头结点前插入 最后返回new
如果不是在头结点插入,最后返回head
struct Test* insertFormfor(struct Test *head,int data,struct Test *new)
{
struct Test *p=head;
if(p->data == data){
new->next = head;
return new;
}
while(p->next != NULL){
if(p->next->data == data){
new->next = p->next;
p->next = new;
return head;
}p = p->next;
}
printf("no data");
return head;
}
struct Test new2 = {200,NULL};
head = insertFormfor(head,1,&new2);
printLink(head);
struct Test new3 = {999,NULL};
head = insertFormfor(head,5,&new3);
printLink(head);
最后输出结果
删除
1.定义一个指针p指向链表头
2.如果删除的是表头,直接链表头指向链表头的next
head = head->next;
3.如果删除的是中间的位置。先遍历找到需要删除的节点,
然后p->next = p->next->next->next.
4.最后返回head
struct Test* deletNode(struct Test *head,int data)
{
struct Test *p = head;
if(p->data == data){
head = head->next;
return head;
}
while(p->next != NULL){
if(p->next->data == data){
p->next = p->next->next;
return head;
}
p = p->next;
}return head;
}
验证链表是否删除成功
删除头结点
printf("************\\n");
printLink(head);
head = deletNode(head,1);
printLink(head);
printf("************\\n");
printLink(head);
head = deletNode(head,3);
printLink(head);
以上是关于链表的插入和删除的主要内容,如果未能解决你的问题,请参考以下文章