1.链表结构的书写
typedef struct mylinklist{
int val; //定义链表结点结构
struct mylinklist* next;
}mylinklist;
2.定义创建链表的方法(此时为空链表)
mylinklist* mylinklistcreate(){
mylinklist* node = (mylinklist*)malloc(sizeof(mylinklist)); //定义链表创建方法,通过mylinklistcreate可以创造出一个结点
node -> next = NULL;
return node;
}
3.定义寻找链表第index位节点的数据,返回值为int型
int mylinklistget(mylinklist* orj,int index){
if(index<0) return -1;
mylinklist* node = orj; //定义mylinklistget方法,获取链表第index位置结点的数据域,有两个参数,一个是链表的头结点
for(int i = 0;i<=index;i++) //一个是所寻找的链表的位置,返回值为数值,所以函数类型为int。
{ //当返回-1时,说明寻找错误
if(node->next == NULL) return -1;
else node = node->next;
}
return node->val;
}
4.定义在给定结点后插入结点的方法
void mylinklistaddtohead(mylinklist* org ,int val){
mylinklist* head = (mylinklist*)malloc(sizeof(mylinklist));
head->val = val; //定义在给定结点后插入结点,注意指针变化顺序
head->next = org->next;
org->next = head;
}
5.定义插入尾结点的方法
void mylinklistaddtotail(mylinklist* org,int val){
mylinklist* tail = (mylinklist*)malloc(sizeof(mylinklist));
tail->val = val;
tail->next = NULL;
mylinklist* node = org; //定义插入尾结点,注意所给指针是否为末指针
while(node->next!=NULL){
node = node->next;
}
node->next = tail;
}
6.定义在index位置插入结点的方法
void mylinklistaddtoindex(mylinklist* org,int index,int val){
if(index<0) return;
mylinklist* node = org;
for(int i = 0;i<index;i++){
if(node->next =NULL) return ;
else
node = node->next;
} //在给定结点后index位置加入数值为val的结点
mylinklist* add =(mylinklist*)malloc(sizeof(mylinklist));
add->val = val;
if(node->next!=NULL)add->next = node->next;
else add->next = NULL;
node->next = add;
}
7.定义删除给定结点后index处的结点
void mylinklistdeleteatindex(mylinklist* org,int index){
if(index<0) return ;
mylinklist* node = org;
for(int i =0;i<index;i++){
if(node->next =NULL) return;
else
node = node->next; //删除给定结点后index处的结点
}
if(node->next==NULL)return;
else node->next = node->next->next;
}
8.释放链表
void mylinklistfree(mylinklist* org){
mylinklist* node = org;
mylinklist* tmp;
while(node){ //释放结点
tmp = node->next;
free(node);
node = tmp;
}
}