哎,这题没有啥难度,我已经不想写了。。。
我觉得再把第20题写一下,这一章就不写了
//虽然觉得这个用KMP做可能会简单。但鉴于我已经忘记了怎么去写了
//就先用low的比较算法来实现吧
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef struct Node
{
int data;
struct Node* next;
}Node;
//创建一个带头节点的链表 返回链表的头指针
Node* Init_List()
{
Node* head = (Node*)malloc(sizeof(Node));
assert(head);
int first,size;
printf("please enter list sizes: ");
scanf("%d",&size);
head->data = 0;
head->next = NULL;
//采用尾插法,构建链表
//则需要构建一个链表的尾指针
Node* tail = head;
for(int i = 0; i < size ; i++)
{
Node* new = (Node*)malloc(sizeof(Node));
assert(new);
scanf("%d",&first);
new -> data = first;
tail-> next = new;
new -> next = NULL;
tail = tail->next;
}
return head;
}
void whether_sequence_sublist(Node* list1,Node* list2)
{
Node* prev,*p,*q;
prev = p = list1->next;
q = list2->next;
while(p && q)
{
if(p->data == q->data)
{
p = p->next;
q = q->next;
}
else
{
prev = prev->next;
p = prev;
q = list2->next;
}
}
if(q == NULL)
printf("yes!\n");
else
printf("wrong!\n");
}
void print_list(Node* head)
{
Node* p ;
p = head->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main(int argc, char const *argv[])
{
Node* list1 = Init_List();
Node* list2 = Init_List();
whether_sequence_sublist(list1,list2);
return 0;
}