链表的定义
struct Test{
int data;
struct Test *next;
};
链表的遍历
void printLink(struct Test *head){
struct Test *point = head;//定义point链表指针作为索引指向链表头
while(point != NULL){
printf("%d ",point -> data);//打印链表头数据
point = point -> next;//point指针指向链表下一节
}
putchar('\n');
}
链表从指定节点后方插入新节点
void inseartback(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;
}
p = p -> next;
}
}
链表从指定节点前方插入新节点
两种情况
- 指定节点为头节点
- 指定节点不是头节点
struct Test* inseartfront(struct Test *head,int data,struct Test *new){
struct Test *p = head;
if(head -> 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;
}
return head;
}
链表删除指定节点
struct Test *delete(struct Test *head,int data){
struct Test *p = head;
if(head -> data == data){//删除节点为头节点
head = head-> next;
return head;
}
while(p != NULL){
if(p -> next -> data == data){
p -> next = p -> next -> next;
return head;
}
p = p -> next;
}
return head;
}
链表修改指定节点
int gaiLink(struct Test *head,int data,int newdata){
while(head != NULL){
if(head -> data == data){
head -> data == newdata;
return 1;
}
head = head -> next;
}
return 0;
}
头插法的动态创建
struct Test *inserthead(struct Test *head,struct Test *new){
if(head == NULL){
head = new;
}else{
new -> next = head;
head = new;
}
return head;
}
struct Test *creathead(struct Test *head){
while(1){
struct Test *new;
new = (struct Test*)malloc(sizeof(struct Test));
scanf("%d",&(new -> data));
if(new -> data == 0){
printf("0 quit\n");
free(new);
return head;
}
head = inserthead(head,new);
}
}
尾插法创建链表
struct Test *insertbehing(struct Test *head,struct Test *new){
struct Test *p = head;
if(head == NULL){
head = new;
return head;
}
while(p -> next != NULL){
p = p -> next;
}
p -> next = new;
return head;
}
struct Test *creathead2(struct Test *head){
while(1){
struct Test *new;
new = (struct Test*)malloc(sizeof(struct Test));
scanf("%d",&(new -> data));
if(new -> data == 0){
printf("0 quit\n");
free(new);
return head;
}
head = insertbehing(head,new);
}
}