#include<stdio.h>struct Test
{int data;struct Test *next;};voidprintLink(struct Test *head){struct Test *p = head;while(p !=NULL){printf("%d ",p->data);
p = p->next;}putchar('\n');}intmain(){struct Test t1 ={1,NULL};struct Test t2 ={2,NULL};struct Test t3 ={3,NULL};
t1.next =&t2;
t2.next =&t3;printLink(&t1);return0;}
(2)链表的个数、查找
#include<stdio.h>struct Test
{int data;struct Test *next;};voidprintLink(struct Test *head){struct Test *p = head;while(p !=NULL){printf("%d ",p->data);
p = p->next;}putchar('\n');}intgetLinkTotaNodeMun(struct Test *head){int cnt =0;struct Test *p = head;while(p !=NULL){
cnt++;
p = p->next;}return cnt;}intsearchLink(struct Test *head,int data){struct Test *p = head;while(p !=NULL){if(p->data == data){return1;}
p = p->next;}return0;}intmain(){struct Test t1 ={1,NULL};struct Test t2 ={2,NULL};struct Test t3 ={3,NULL};
t1.next =&t2;
t2.next =&t3;printLink(&t1);printf("num = %d \n",getLinkTotaNodeMun(&t1));printf("search = %d \n",searchLink(&t1,5));return0;}
(3)链表的后插、前插
#include<stdio.h>#include<stdlib.h>struct Test
{int data;struct Test *next;};voidprintLink(struct Test *head){struct Test *p = head;while(p !=NULL){printf("%d ",p->data);
p = p->next;}putchar('\n');}intinsertFromBehind(struct Test *head,struct Test *new,int data){struct Test *p = head;while(p !=NULL){if(p->data == data){
new->next = p->next;
p->next = new;return1;}
p = p->next;}return0;}struct Test*inserFromfor(struct Test *head,struct Test *new,int data){struct Test *p = head;if(p->data == data){
new->next = p;return new;}while(p->next !=NULL){//printf("data = %d\n",p->next->data);if(p->next->data == data){
new->next = p->next;
p->next = new;return head;//得在这retuen 不然卡住}
p = p->next;}printf("no this data :%d\n",data);return head;intmain(){struct Test *head =NULL;struct Test t1 ={1,NULL};struct Test t2 ={2,NULL};struct Test t3 ={3,NULL};struct Test new ={6,NULL};struct Test new2 ={89,NULL};
t1.next =&t2;
t2.next =&t3;
head =&t1;insertFromBehind(head,&new,2);printLink(head);
head =inserFromfor(head,&new2,2);printLink(head);return0;}
(4)链表的删除
struct Test
{int data;struct Test *next;};struct Test*deleNode(struct Test *head,int data){struct Test *p = head;struct Test *p2 =NULL;if(p->data == data){
head = head->next;// free(p); //p不是malloc出来的,free不了,不在堆空间,在动态创建链表的时候可用return head;}while(p->next !=NULL){if(p->next->data == data){
p2 = p->next;
p->next = p->next->next;//free(p2);return head;}
p = p->next;}return head;}intmain(){struct Test *head =NULL;struct Test t1 ={1,NULL};struct Test t2 ={2,NULL};struct Test t3 ={3,NULL};
t1.next =&t2;
t2.next =&t3;
head =&t1;
head =deleNode(head,3);printLink(head);return0;}