看了一点网上的代码,结合自己对链表的理解。将对链表常用的操作集合程序化如下:
#include<stdio.h> #include<stdlib.h> typedef struct Node { int Val; struct Node *next; }List; List *list_add(List **p,int Val);//此处是二级指针 void List_Print(List *p); List *list_insert(List **p,int Val,int i);//i为插入的位置 Val插入的值 List *list_remove(List **p,int i);//删除指定位置i的值 int main() { List *n=NULL; list_add(&n,0); list_add(&n,1); list_add(&n,2); list_add(&n,3); list_add(&n,4); list_insert(&n,5,3); list_insert(&n,6,2); list_remove(&n,2); list_remove(&n,3); List_Print(n); return 0; } List *list_remove(List **p,int i)//删除指定位置i的值 { int count=0; List *q,*a; a=*p; if(p==NULL) return NULL; for(count=0;count<(i-2);count++) { a=a->next; if(a==NULL) return NULL; } q=a->next;//后继元 a->next=q->next; return *p; } List *list_insert(List **p,int Val,int i) { int count=0; List *q,*a; a=*p; if(p==NULL) return NULL; for(count=0;count<(i-2);count++) { a=a->next; if(a==NULL) return NULL; } q=a->next;//后继元 List *temp=(List *)malloc(sizeof(List)); temp->next=q; temp->Val=Val; a->next=temp; return *p; } List *list_add(List **p,int Val)//此处是二级指针 { if(p==NULL) return NULL; List *temp=(List *)malloc(sizeof(List)); temp->next=*p; temp->Val=Val; *p=temp; //头指针移动到开始处 *P在此处的作用为头指针 return *p; } void List_Print(List *p) { if(p==NULL) printf("list is empty\n"); while(p) { printf("%d\t",p->Val); p=p->next; } }
原文:http://blog.csdn.net/u010275850/article/details/44542357