1 //按元素大小顺序插入到链表中
2 #include<stdio.h>
3 #include<stdlib.h>
4 #include<string.h>
5
6 struct Node
7 {
8 int value;
9 struct Node *next;
10 };
11
12 void insertNode(struct Node **head, int value)
13 {
14 struct Node *previous;
15 struct Node *current;
16 struct Node *newnode;
17
18 current = *head;
19 previous = NULL;
20
21
22 while (current != NULL && current->value < value)
23 {
24 int b = current->value;
25 previous = current; //previous记录current上一个节点的位置
26 current = current->next;
27 }
28 newnode = (struct Node *)malloc(sizeof(struct Node));//分配内存
29 if (newnode == NULL)
30 {
31 printf("内存分配失败!");
32 exit(1);
33 }
34 newnode->value = value;
35 newnode->next = current;
36 if (previous == NULL)
37 {
38 *head = newnode;
39 }
40 else
41 {
42 previous->next = newnode;
43 }
44
45 }
46
47 void printNode(struct Node *head)
48 {
49 struct Node *current;
50 current = head;
51 while (current != NULL)
52 {
53 printf("%d ", current->value);
54 current = current->next;
55 }
56 printf("\n");
57 }
58
59 void deleteNode(struct Node **head, int value)
60 {
61 struct Node *previous;
62 struct Node *current;
63
64 current = *head;
65 previous = NULL;
66
67 while (current != NULL && current->value != value)
68 {
69 previous = current;
70 current = current->next;
71 }
72 if (current == NULL)
73 {
74 printf("找不到匹配的节点\n");
75 return;
76 }
77 else
78 {
79 if (previous == NULL)
80 {
81 *head = current->next;
82 }
83 else
84 {
85 previous->next = current->next;
86 }
87 free(current);
88 }
89 }
90 int main()
91 {
92 struct Node *head = NULL;
93 int input;
94 printf("开始测试插入整数...\n");
95 while (1)
96 {
97 printf("\n请输入一个整数(-1表示结束):");
98 scanf("%d", &input);
99 printf("\n");
100 if (input == -1)
101 {
102 break;
103 }
104 insertNode(&head, input);
105 printNode(head);
106 }
107
108 printf("开始测试删除整数...\n");
109 while (1)
110 {
111 printf("\n请输入一个整数(-1表示结束):");
112 scanf("%d", &input);
113 printf("\n");
114 if (input == -1)
115 {
116 break;
117 }
118 deleteNode(&head, input);
119 printNode(head);
120 }
121
122 return 0;
123 }
转载自:khq溪风