#include #include typedef struct Node { int data; struct Node *next; } Node; Node *constructLinkedList(); Node *appendLinkedList(Node *ptr, int data); void deleteLinkedList(Node *head); int main(void) { Node *listA = constructLinkedList(); Node *listB = constructLinkedList(); Node *ptrA = listA, *ptrB, *ptrC; int matched = 0; while (ptrA != NULL) { matched = 0; ptrB = listB; if (ptrA->data == ptrB->data) { matched = 1; ptrC = ptrA; while (ptrB != NULL) { if (ptrC == NULL) { matched = 0; break; } if (ptrC->data != ptrB->data) { matched = 0; break; } ptrB = ptrB->next; ptrC = ptrC->next; } } if (matched == 1) { break; } ptrA = ptrA->next; } if (matched) { printf("ListB is the sub sequence of ListA."); } else { printf("ListB is not the sub sequence of ListA."); } deleteLinkedList(listA); deleteLinkedList(listB); return 0; } Node *constructLinkedList() { Node *head = malloc(sizeof(struct Node)); int buf; scanf("%d", &buf); head->data = buf; head->next = NULL; Node *ptr = head; scanf("%d", &buf); while (buf != -1) { ptr = appendLinkedList(ptr, buf); scanf("%d", &buf); } return head; } Node *appendLinkedList(Node *ptr, int data) { Node *new = malloc(sizeof(Node)); new->data = data; new->next = NULL; ptr->next = new; return new; } void deleteLinkedList(Node *head) { if (head == NULL) { return; } else { deleteLinkedList(head->next); free(head); } }