新建一个链表

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

原文地址:https://www.cnblogs.com/crane-practice/p/3639264.html