首页 > 代码库 > 链表的简单实现

链表的简单实现

 1 #include <cstdio>
 2 #include <cassert>
 3 
 4 typedef struct node {
 5     int data;
 6     node * next;
 7 }Node, *pNode;
 8 
 9 pNode CreateList() {
10     pNode head, p1, p2;
11     p1 = new Node;
12     printf("Please input data: \n");
13     scanf("%d", &p1->data);
14     int n = 0;
15 
16     while (p1->data != 0) {
17         n++;
18         if (n == 1)
19             head = p1;
20         else
21             p2->next = p1;
22         p2 = p1;
23         p1 = new Node;
24         scanf("%d", &p1->data);
25     }
26     p2->next = NULL;
27     return head;
28 }
29 
30 void Sort(pNode head) {
31     for (pNode p = head; p != NULL; p = p->next) {
32         for (pNode q = p->next; q != NULL; q = q->next) {
33             if (q->data < p->data) {
34                 int tmp = p->data;
35                 p->data = http://www.mamicode.com/q->data;
36                 q->data =http://www.mamicode.com/ tmp;
37             }
38         }
39     }
40 }
41 
42 pNode Merge(pNode head1, pNode head2) {
43     assert(head1 != NULL && head2 != NULL);
44 
45     Sort(head1);
46     Sort(head2);
47 
48     pNode head, end;
49     bool first = true;
50 
51     while (true) {
52         if (head1 == NULL) {
53             end->next = head2;
54             break;
55         }
56         else if (head2 == NULL) {
57             end->next = head1;
58             break;
59         }
60         if (head1->data >= head2->data) {
61             pNode p = new Node;
62             p->data = http://www.mamicode.com/head2->data;
63             head2 = head2->next;
64             if (first) {
65                 first = false;
66                 head = p;
67             }
68             else
69                 end->next = p;
70             end = p;
71         }
72         else {
73             pNode p = new Node;
74             p->data = http://www.mamicode.com/head1->data;
75             head1 = head1->next;
76             if (first) {
77                 first = false;
78                 head = p;
79             }
80             else
81                 end->next = p;
82             end = p;
83         }
84     }
85     return head;
86 }
87 
88 int main()
89 {
90     pNode plist1 = CreateList();
91     pNode plist2 = CreateList();
92 
93     pNode plist3 = Merge(plist1, plist2);
94     for (pNode p = plist3; p != NULL; p = p->next)
95         printf("%d\n", p->data);
96 
97     return 0;
98 }