其他分享
首页 > 其他分享> > 求两个用链表存起来的单词的后缀

求两个用链表存起来的单词的后缀

作者:互联网

前言

        一次数据结构的作业,写完了不拿来发CSDN有点可惜。估计这个没多少人看,毕竟只是博主兴致来了的作品。也算是忙里偷闲了吧,现在已经期末了,希望我马原不会挂。

题目

设计思路

        利用两个单词的长度差,先将长度大的链表指针往后移,使得之后的两链表长度一致,然后一一比较。当两个字符相等时就退出比较。

实现代码

//我直接写出了完整的实现代码,是可以运行的
//因为返回的位置是一个指针,不方便进行输出
//所以就直接将相同后缀输出了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Node {
	char Data;
	struct Node* Next;
}*node;
node CreateNode(char s[]) {//用单词s创建链表
	node head = (node)malloc(sizeof(Node));
	head->Next = NULL;
	node q = head;
	for (int i = 0; s[i]; i++) {
		node p = (node)malloc(sizeof(Node));
		p->Data = s[i];
		q->Next = p;
		p->Next = NULL;
		q = p;
	}
	return head;
}
int length(node head) {//计算链表的长度
	node p = head->Next;
	int sum = 0;
	while (p != NULL) sum++, p = p->Next;
	return sum;
}
node postfix(node head1, node head2) {
	node postion = NULL;
	int s1 = length(head1), s2 = length(head2);
	if (s1 == s2) {
		node p = head1->Next, q = head2->Next;
		while (p != NULL && q != NULL) {
			if (p->Data == q->Data) return p;
			p = p->Next, q = q->Next;
		}
	}
	else if (s1 > s2) {
		int a = s1 - s2;
		node p = head1->Next, q = head2->Next;;
		while (a--)p = p->Next;
		while (p != NULL && q != NULL) {
			if (p->Data == q->Data) return p;
			p = p->Next, q = q->Next;
		}
	}
	else {
		int a = s2 - s1;
		node q = head2->Next, p = head1->Next;
		while (a--)q = q->Next;
		while (p != NULL && q != NULL) {
			if (p->Data == q->Data) return q;
			p = p->Next, q = q->Next;
		}
	}
	return postion;
}
void Print(node head, node postion) {//从位置postion开始输出链表
	node p = head->Next;
	while (p != postion)p = p->Next;
	while (p != NULL)printf("%c", p->Data), p = p->Next;
	printf("\n");
}
int main() {
	char str1[1005], str2[1005];
	while (~scanf("%s%s", str1, str2)) {
		node head1 = CreateNode(str1);
		node head2 = CreateNode(str2);
		node postion = postfix(head1, head2);
		printf("这两个单词的相同后缀为:");
		if (strlen(str1) > strlen(str2))
			Print(head1, postion);
		else
			Print(head2, postion);
		printf("\n");
	}
	return 0;
}

运行结果

结语

        其实博主感觉这个代码还是有bug的,毕竟只是一时的娱乐作品。比如如果两个单词中间由一个字母相等,之后就全部都不想等的,程序判断还是有相同后缀。嗯。。。。博主也懒得去实现那么多了,毕竟只是一个小作业,没太多时间。当然,有问题还是可以问的哦~

标签:node,单词,后缀,postion,Next,链表,while,NULL,Data
来源: https://blog.csdn.net/xiexieyuchen/article/details/122016821