C语言:转自:http://www.cnblogs.com/newwy/archive/2010/10/10/1847456.html
1 //////////////////////////////////////////// 2 //单链表的初始化,建立,插入,查找,删除。// 3 //Author:Wang Yong // 4 //Date: 2010.8.19 // 5 //////////////////////////////////////////// 6 7 8 #include <stdio.h> 9 #include <stdlib.h> 10 11 typedef int ElemType; 12 //////////////////////////////////////////// 13 14 //定义结点类型 15 typedef struct Node 16 { 17 ElemType data; //单链表中的数据域 18 struct Node *next; //单链表的指针域 19 }Node,*LinkedList; 20 21 //////////////////////////////////////////// 22 23 //单链表的初始化 24 25 LinkedList LinkedListInit() 26 { 27 Node *L; 28 L = (Node *)malloc(sizeof(Node)); //申请结点空间 29 if(L == NULL) //判断是否有足够的内存空间 30 printf("申请内存空间失败 "); 31 L->next = NULL; //将next设置为NULL,初始长度为0的单链表 32 } 33 34 //////////////////////////////////////////// 35 36 //单链表的建立1,头插法建立单链表 37 38 LinkedList LinkedListCreatH() 39 { 40 Node *L; 41 L = (Node *)malloc(sizeof(Node)); //申请头结点空间 42 L->next = NULL; //初始化一个空链表 43 44 ElemType x; //x为链表数据域中的数据 45 while(scanf("%d",&x) != EOF) 46 { 47 Node *p; 48 p = (Node *)malloc(sizeof(Node)); //申请新的结点 49 p->data = x; //结点数据域赋值 50 p->next = L->next; //将结点插入到表头L-->|2|-->|1|-->NULL 51 L->next = p; 52 } 53 return L; 54 } 55 56 //////////////////////////////////////////// 57 58 //单链表的建立2,尾插法建立单链表 59 60 LinkedList LinkedListCreatT() 61 { 62 Node *L; 63 L = (Node *)malloc(sizeof(Node)); //申请头结点空间 64 L->next = NULL; //初始化一个空链表 65 Node *r; 66 r = L; //r始终指向终端结点,开始时指向头结点 67 ElemType x; //x为链表数据域中的数据 68 while(scanf("%d",&x) != EOF) 69 { 70 Node *p; 71 p = (Node *)malloc(sizeof(Node)); //申请新的结点 72 p->data = x; //结点数据域赋值 73 r->next = p; //将结点插入到表头L-->|1|-->|2|-->NULL 74 r = p; 75 } 76 r->next = NULL; 77 78 return L; 79 } 80 81 //////////////////////////////////////////// 82 83 //单链表的插入,在链表的第i个位置插入x的元素 84 85 LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) 86 { 87 Node *pre; //pre为前驱结点 88 pre = L; 89 int tempi = 0; 90 for (tempi = 1; tempi < i; tempi++) 91 pre = pre->next; //查找第i个位置的前驱结点 92 Node *p; //插入的结点为p 93 p = (Node *)malloc(sizeof(Node)); 94 p->data = x; 95 p->next = pre->next; 96 pre->next = p; 97 98 return L; 99 } 100 101 //////////////////////////////////////////// 102 103 //单链表的删除,在链表中删除值为x的元素 104 105 LinkedList LinkedListDelete(LinkedList L,ElemType x) 106 { 107 Node *p,*pre; //pre为前驱结点,p为查找的结点。 108 p = L->next; 109 while(p->data != x) //查找值为x的元素 110 { 111 pre = p; 112 p = p->next; 113 } 114 pre->next = p->next; //删除操作,将其前驱next指向其后继。 115 free(p); 116 return L; 117 } 118 119 ///////////////////////////////////////////// 120 121 int main() 122 { 123 LinkedList list,start; 124 /* printf("请输入单链表的数据:"); 125 list = LinkedListCreatH(); 126 for(start = list->next; start != NULL; start = start->next) 127 printf("%d ",start->data); 128 printf(" "); 129 */ printf("请输入单链表的数据:"); 130 list = LinkedListCreatT(); 131 for(start = list->next; start != NULL; start = start->next) 132 printf("%d ",start->data); 133 printf(" "); 134 135 int i; 136 ElemType x; 137 printf("请输入插入数据的位置:"); 138 scanf("%d",&i); 139 printf("请输入插入数据的值:"); 140 scanf("%d",&x); 141 LinkedListInsert(list,i,x); 142 for(start = list->next; start != NULL; start = start->next) 143 printf("%d ",start->data); 144 printf(" "); 145 printf("请输入要删除的元素的值:"); 146 scanf("%d",&x); 147 LinkedListDelete(list,x); 148 for(start = list->next; start != NULL; start = start->next) 149 printf("%d ",start->data); 150 printf(" "); 151 152 return 0; 153 }
另外可以参看:http://www.nowamagic.net/librarys/veda/detail/1803
Java版参看:http://blog.csdn.net/qiucaijuan/article/details/6721281