1 #include <stdio.h>
2 #include<malloc.h>
3
4 typedef struct Node
5 {
6 int val;
7 struct Node * pNext;
8 }Node,* pNode;
9
10 pNode creat_list();
11 void trevel_list(pNode);
12 void sort_list(pNode);
13 void insert_list(pNode,int,int);
14 int length_list(pNode);
15 int delete_list(pNode,int);
16 void search_list(pNode,int);
17
18 void main()
19 {
20 pNode pHead = creat_list();
21 printf("输入后信息如下:\n");
22 trevel_list(pHead);
23 printf("\n排序之后如下:\n");
24 sort_list(pHead);
25 trevel_list(pHead);
26 printf("\n链表长度位:\n");
27 printf("%d",length_list(pHead));
28 printf("\n删除第三个数字为:\n");
29 printf("%d",delete_list(pHead,3));
30 printf("\n删除之后如下:\n");
31 trevel_list(pHead);
32 printf("\n删除之后链表长度为:\n");
33 printf("%d",length_list(pHead));
34 printf("\n在第5个位置插入一个节点\n");
35 insert_list(pHead,5,15);
36 printf("\n插入之后如下:\n");
37 trevel_list(pHead);
38 search_list(pHead,15);
39 }
40
41 pNode creat_list()
42 {
43 pNode pHead,pTail,pNew;
44 int len,i;
45 scanf("%d",&len);
46 pHead = (pNode)malloc(sizeof(Node));
47 pTail = pHead;
48 pTail->pNext = NULL;
49 for (i = 0; i < len; i++)
50 {
51 pNew = (pNode)malloc(sizeof(Node));
52 scanf("%d",&pNew->val);
53 pTail->pNext=pNew;
54 pTail = pNew;
55 pTail->pNext = NULL;
56 }
57 return pHead;
58 }
59
60 void trevel_list(pNode pHead)
61 {
62 pNode t = pHead->pNext;
63 while(t != NULL)
64 {
65 printf("%d ",t->val);
66 t = t->pNext;
67 }
68 }
69
70 void sort_list(pNode pHead)
71 {
72 pNode p,q;
73 int i,j,temp,len;
74 len=length_list(pHead);
75 for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
76 {
77 for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
78 {
79 if(p->val > q->val)
80 {
81 temp = p->val;
82 p->val = q->val;
83 q->val = temp;
84 }
85 }
86 }
87 }
88
89 void insert_list(pNode pHead,int pos,int val)
90 {
91 pNode p,t;
92 int len = length_list(pHead);
93 if(pos>len)
94 printf("插入失败!!!\n");
95 else
96 {
97 p = pHead->pNext;
98 pos--;
99 while(pos--)
100 {
101 p = p->pNext;
102 }
103 t = (pNode)malloc(sizeof(Node));
104 t->val = val;
105 t->pNext = p->pNext;
106 p->pNext = t;
107 }
108 }
109
110 int delete_list(pNode pHead,int pos)
111 {
112 int i,val,len;
113 pNode t,p=pHead;
114 len = length_list(pHead);
115 if(pos>len)
116 printf("删除失败!!!\n");
117 else
118 { pos--;
119 while(pos--)
120 {
121 p=p->pNext;
122 }
123 t = p->pNext;
124 p->pNext = t->pNext;
125 val = t->val;
126 free(t);
127 }
128 return val;
129 }
130
131 int length_list(pNode pHead)
132 {
133 int len = 0;
134 pNode t = pHead->pNext;
135 while(t != NULL)
136 {
137 len++;
138 t = t->pNext;
139 }
140 return len;
141 }
142
143 void search_list(pNode pHead, int val)
144 {
145 pNode p = pHead->pNext;
146 int n=0;
147 while(p!=NULL)
148 {
149 n++;
150 if(p->val == val)
151 printf("\n链表第%d节点有%d这个值\n",n, val);
152 p=p->pNext;
153 }
154 if(!n)
155 printf("未找到!!!\n");
156 }