1 #include <stdio.h>
2 #include <stdlib.h>
3 /*
4 链表:创建空链表,插入节点,遍历,求长度,查找,删除,反转
5 */
6 typedef struct node
7 {
8 int data;
9 struct node * next;
10 }NODE;
11 //创建空链表
12 NODE * createList()
13 {
14 NODE *head = (NODE *)malloc(sizeof(NODE));
15 head->next = NULL;
16
17 return head;
18 }
19 //遍历结点
20 void traverList(NODE * head)
21 {
22 head = head->next;
23 while(head)
24 {
25 printf("%d\n",head->data);
26 head = head->next;
27 }
28
29 return ;
30 }
31 //求链表长度
32 int lenList(NODE *head)
33 {
34 int len = 0;
35 head = head->next;
36 while(head)
37 {
38 len++;
39 head = head->next;
40 }
41
42 return len;
43 }
44 //查找结点
45 NODE * lookList(NODE *head,int NodeData)
46 {
47 while(head)
48 {
49 if(head->data == NodeData)
50 break;
51 else
52 head = head->next;
53 }
54 return head;
55 }
56 //删除结点
57 void deleteNode(NODE *head,NODE *pointer)
58 {
59 while(head->next != pointer)
60 {
61 head = head->next;
62 }
63 head->next = pointer->next;
64 }
65 //打断链表
66 NODE * breakList(NODE * head)
67 {
68 NODE *p = head->next;
69 head->next = NULL;
70
71 return p;
72 }
73 int main(void)
74 {
75 NODE * head = createList();
76 //插入节点
77 int i;
78 printf("请输入结点数据\n");
79 scanf("%d",&i);
80 while(i)
81 {
82 NODE * sur = (NODE * )malloc(sizeof(NODE));
83 sur->data = i;
84
85 sur->next = head->next;
86 head->next = sur;
87
88 scanf("%d",&i);
89 }
90 traverList(head);
91 int len = lenList(head);
92 printf("链表长度len = %d\n",len);
93 printf("---------查找3这个结点---------\n");
94 NODE * pointer = lookList(head,3);
95 if(pointer == NULL)
96 {
97 printf("没有找到3这个结点\n");
98 }
99 else
100 {
101 printf("3这个结点的地址为:%p\n",pointer);
102 deleteNode(head,pointer);
103 }
104 traverList(head);
105 //链表反转
106 printf("---------链表反转----------\n");
107 NODE *p = breakList(head);//获取新链表
108 //将新链表插入到空链表中去。
109 while(p)
110 {
111 NODE *q = p->next;
112 p->next = head->next;
113 head->next = p;
114
115 p = q;
116 }
117 traverList(head);
118
119 return 0;
120 }