链表值排序之冒泡

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 /*
 4 链表值排序之冒泡:核心思想:1.每次都从头开始比较
 5                             2.推动链表往下走的不在是下标
 6 */
 7 typedef struct node
 8 {
 9     int data;
10     struct node * next;
11 }NODE;
12 NODE * createList()
13 {
14     NODE *head = (NODE *)malloc(sizeof(NODE));
15     head->next = NULL;
16 
17     return head;
18 }
19 void insertNode(NODE *head,int insertData)
20 {
21     NODE * sur = (NODE *)malloc(sizeof(NODE));
22     sur->data = insertData;
23 
24     sur->next = head->next;
25     head->next = sur;
26     return ;
27 }
28 void traverNode(NODE * head)
29 {
30     head = head->next;
31     while(head)
32     {
33         printf("%d\n",head->data);
34         head = head->next;
35     }
36     return ;
37 }
38 int lenList(NODE *head)
39 {
40     int len = 0;
41     head = head->next;
42     while(head)
43     {
44         len++;
45         head = head->next;
46     }
47 
48     return len;
49 }
50 void sortNode(NODE *head)
51 {
52     int len = lenList(head);
53     NODE * sur = NULL;
54     int temp;
55     for(int i = 0;i<len-1;i++)
56     {
57         sur = head->next;
58         for(int j = 0;j<len-1-i;j++)
59         {
60             if(sur->data > sur->next->data)
61             {
62                 temp = sur->data;
63                 sur->data = sur->next->data;
64                 sur->next->data = temp;
65             }
66             sur = sur->next;//推动链表向前走
67         }
68     }
69     return ;
70 }
71 int main(void)
72 {
73     NODE * head = createList();
74     for(int i = 0;i<30;i++)
75     {
76         insertNode(head,rand()%100);
77     }
78     printf("排序前\n");
79     traverNode(head);
80     printf("排序后\n");
81     sortNode(head);
82     traverNode(head);
83 
84     return 0;
85 }

猜你喜欢

转载自www.cnblogs.com/wangchaomahan/p/9704268.html