#include #include #include #include "dllist.h" void setUnion(Dllist *L1, Dllist *L2) { Dllist_Node *p1, *p2, *saveNode; int val1, val2; p1 = dll_first(L1); p2 = dll_first(L2); while ((p1 != dll_sentinel(L1)) && (p2 != dll_sentinel(L2))) { val1 = *(int *)dll_val(p1); val2 = *(int *)dll_val(p2); if (val1 == val2) { p1 = dll_next(p1); p2 = dll_next(p2); } else if (val1 < val2) { p1 = dll_next(p1); } else { // val1 > val2 so add val2 to L1 dll_insert_before(p1, dll_val(p2)); p2 = dll_next(p2); } } // add remainder of L2 to L1 if necessary for ( ; p2 != dll_sentinel(L2); p2 = dll_next(p2)) { dll_append(L1, dll_val(p2)); } } main(int argc, char *argv[]) { Dllist *list1 = new_dllist(); Dllist *list2 = new_dllist(); int i = 1; int *val; Dllist_Node *ptr; while (strcmp(argv[i], "$") != 0) { val = (int *)malloc(sizeof(int)); sscanf(argv[i], "%i", val); dll_append(list1, val); i++; } for (i++; i < argc; i++) { val = (int *)malloc(sizeof(int)); sscanf(argv[i], "%i", val); dll_append(list2, val); } setUnion(list1, list2); for (ptr = dll_first(list1); ptr != dll_sentinel(list1); ptr = dll_next(ptr)) { printf("%i\n", *(int *)dll_val(ptr)); } }