공부/자료구조

링크드 리스트 2개 오름차순으로 병합하기

choryDev 2019. 5. 10. 11:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef int element;
 
typedef struct ListNode {
    element data;
    struct ListNode *link;
} ListNode;
 
void display(ListNode *head){
    ListNode *= head;
 
    while (p != NULL) {
        printf("%d->", p->data);
        p = p->link;
    }
    printf("\n");
}
 
ListNode* merge(ListNode* head1, ListNode*head2) {
    ListNode *p1, *p2, *np;
    ListNode *newhead;
 
    newhead = NULL;
    np = NULL;
    p1 = head1;
    p2 = head2;
 
    while (p1 != NULL && p2 != NULL) {
        if (newhead == NULL) {
            if (p1->data < p2->data) {
                newhead = p1;
                np = newhead;
                p1 = p1->link;
            }
            else if (p1->data > p2->data) {
                newhead = p2;
                np = newhead;
                p2 = p2->link;
            }
        }
        else {
            if (p1->data < p2->data) {
                np->link = p1;
                np = p1;
                p1 = p1->link;
            }
            else if (p1->data > p2->data) {
                np->link = p2;
                np = p2;
                p2 = p2->link;
            }
        }
        np->link = NULL;
        display(newhead);
    }
    if (p1 != NULL) {
        np->link = p1;
    }
    else if (p2 != NULL) {
        np->link = p2;
    }
    return newhead;
}
 
void main() {
    ListNode *head1, *head2;
    head1 = NULL;
    head2 = NULL;
 
    ListNode *p1;
    p1 = (ListNode *)malloc(sizeof(ListNode));
    p1->data = 1;
    p1->link = NULL;
    head1 = p1;
 
    ListNode *p2;
    p2 = (ListNode *)malloc(sizeof(ListNode));
    p2->data = 3;
    p2->link = NULL;
    p1->link = p2;
 
    ListNode *p3;
    p3 = (ListNode *)malloc(sizeof(ListNode));
    p3->data = 4;
    p3->link = NULL;
    p2->link = p3;
 
    ListNode *p4;
    p4 = (ListNode *)malloc(sizeof(ListNode));
    p4->data = 2;
    p4->link = NULL;
    head2 = p4;
 
    ListNode *p5;
    p5 = (ListNode *)malloc(sizeof(ListNode));
    p5->data = 5;
    p5->link = NULL;
    p4->link = p5;
 
    display(head1); //출력하는 함수 
 
    display(head2); //출력하는 함수 
 
    display(merge(head1, head2));
 
}
 
 
cs

'공부 > 자료구조' 카테고리의 다른 글

큐~  (0) 2019.05.31
스택 괄호검사  (0) 2019.05.24
더블링크드 리스트 c 언어  (0) 2019.05.17
C로 리스트 구현하기~  (0) 2019.05.03