#include #include #include #include "dllist.h" void setIntersect(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) { saveNode = p1; p1 = dll_next(p1); dll_delete_node(saveNode); } else { // val1 > val 2 p2 = dll_next(p2); } } /* If L1 has elements remaining after L2 has been exhausted, then delete the remaining elements from L1 */ while (p1 != dll_sentinel(L1)) { saveNode = p1; p1 = dll_next(p1); dll_delete_node(saveNode); } } 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); } setIntersect(list1, list2); for (ptr = dll_first(list1); ptr != dll_sentinel(list1); ptr = dll_next(ptr)) { printf("%i\n", *(int *)dll_val(ptr)); } }