数据结构算法

//判断两个链表的共同后缀的值
#include
#include
#include
typedef struct lnode{
	int data;
	struct lnode* next;
}lnode,*linklist;
char str1[7]={'l','o','a','d','i','n','g'};
char str2[5]={'b','e','i','n','g'};
int n1=7;
int n2=5;
void buildlink(linklist &L,char arr[],int n)
{
	L=(linklist)malloc(sizeof(lnode));//动态分配
	lnode *s,*r=L;
	for(int i=0;idata=arr[i];
		r->next=s;
		r=s;
	}
	r->next=NULL;
}
int length(linklist L)//计算长度
{
	 int ans=0;
	 lnode *s=L->next;
		while(s)
		{
		ans++;
		s=s->next;
		}
	 return ans;
}
void DispList(linklist L)//输出单链表
{
	lnode*p;
	p = L->next;
	while(p)
	{	
		printf("%c",p->data);
		p = p->next;
	}
} 	
linklist first(linklist L1,linklist L2)//找到第一个共同后缀
{
	int len1=length(L1);
	int len2=length(L2);
	int dist=abs(len1-len2);
	lnode* p=L1->next;
	lnode* q=L2->next;
	if(len1>=len2)
	{
		while(dist--)
		{
			p=p->next;
		}
	}
	else
	{
		while(dist--)
		{
			q=q->next;
		}
	}
	while(p)
	{
		if(p->data!=q->data)
		{
			p=p->next;
			q=q->next;
		}
		else return p;
	}
	return p;
}
int main()
{
	linklist L1,L2;
	buildlink(L1,str1,n1);
	buildlink(L2,str2,n2);
	DispList(L1);
	printf("\n");
	DispList(L2);
	printf("\n");
	linklist ans=first(L1,L2);
	printf("%c\n",ans->data);
	return 0;
}

你可能感兴趣的:(数据结构,算法)