1.插入删除第一个位置总是有问题,但不知道怎么解决。。。。
2.指针好香啊
#include <stdio.h>
#include <stdlib.h>
//链表中节点的结构
typedef struct Linklist{
int elem;
struct Linklist *next;
}linklist;
//初始化链表
linklist* init(){
linklist *p=NULL;//创建头指针
linklist * temp=(linklist*)malloc(sizeof(linklist));//创建头节点
temp->elem=1;
temp->next=NULL;
p=temp;
/*for(int i=2;i<5;i++){
linklist * a=(linklist*)malloc(sizeof(linklist));
a->elem=i;
a->next=NULL;
temp->next=a;
temp=temp->next;
}*/
return p;
}
//遍历链表
void tra(linklist *p){
linklist *temp=p;
while(temp){
printf("%d ", temp->elem);
temp=temp->next;
}
printf("\n");
}
//在pos位置插入value
linklist* insert(linklist *p,int pos,int value){
linklist *temp=p;
for(int i=1;i<pos-1;i++){
if(temp==NULL){
printf("insert wrong position\n");
return NULL;
}
temp=temp->next;
}
linklist *a=(linklist*)malloc(sizeof(linklist));
a->elem=value;
a->next=temp->next;
temp->next=a;
return p;
}
//删除pos位置的元素
linklist* del(linklist *p,int pos){
linklist *temp=p;
//找到位置
for(int i=1;i<pos-1;i++){
if(temp==NULL){
printf("delete wrong position\n");
return NULL;
}
temp=temp->next;
}
//储存被删除的节点
linklist *a=temp->next;
//改动指向
temp->next=temp->next->next;
//回收
free(a);
return p;
}
//查找元素
int find_by_value(linklist *p,int value){
linklist *t=p;
int i=1;
while(p){
if(p->elem==value){
printf("position in %d\n",i);
return i;
}
p=p->next;
i++;
}
printf("link does not have this element\n");
return -1;
}
int main(){
linklist *p=init();
tra(p);
insert(p,1,5);
insert(p,1,4);
insert(p,1,3);
tra(p);
del(p,2);
tra(p);
find_by_value(p,5);
return 0;
}
版权声明:本文为jiangjun_feng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。