240805单链表的插入删除
作者:
Yoture
,
2024-08-05 20:14:53
,
所有人可见
,
阅读 3
//带头节点的插入
#include<stdio.h>
#include<stdlib.h>
typedef struct lnode{
int data;
lnode *next;
}lnode,*linklist;
bool insert(linklist &l,int i,int e){
if(i<1){
return false;
}
//创建一个用于指向特定位序的指针
lnode *p;
p=l;//p与l都指向头结点
for(int j=0;j<i-1;j++){
p=p->next;
}
lnode *s=(lnode*)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//不带头结点
//插入的第一个节点操作不一样,并另j=1
bool insert(linklist &l,int i,int e)
{
if(i<1){
return false;
}
if(i==1){
lnode *s=(lnode*)malloc(sizeof(lnode));
s->data=e;
s->next=l;
l=s;//切记l是头指针,s是结构体指针l指向的就是第一个结点,不用写->next
return true;
}
lnode *p......
}
}
///////在某个节点后插入,变化不大,是按位插入的一部分
bool insert(lnode *p,int e){
if(p==NULL){
return false;
}
lnode *s=(lnode*)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
///////在某个节点前插入‘值’(如果输入的地方要插入一个结点而不是一个值,可以用一个中间变量/存储数据域)
bool insert(lnode *p,int e){
if(p==NULL){
return false;
}
lnode *s=(lnode*)malloc(sizeof(lnode));
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
///////按位序删除节点(带头结点:l指向头结点而非第一个有数据域的结构体)
bool delete(linklist &l,int i,int &e)
{
if(i<1){
return false;
}
lnode *p;
p=l;
for(j=0;j<i-1;j++){
p=p->next;
}
if(p==NULL){
return false;
}
if(p->next==NULL){
return false;
}
lnode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
///////删除某个结点
bool delete(lnode *p){
if(p==NULL){
renturn flase;
}
lnode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}