题目8  假定两个带头节点的单链表,保存单词,后缀相同时共享相同空间,找出共同后缀的起始位置。

版权声明:作者:weizu_cool https://blog.csdn.net/qq_26460841/article/details/83217668
  • 假定两个带头节点的单链表,保存单词,后缀相同时共享相同空间,找出共同后缀的起始位置。

首先:这里给出创建的代码:至于createList函数,写在了头文件中,后面统一给出。
char word1[]={'l','o','a','d'};
	char word2[]={'p','l','a','y'};
	char last[]={'i','n','g'};
	Node* node1 = createList(word1, 4, true);//带头结点
	Node* node2 = createList(word2, 4, true);//带头结点
	Node* nodelast = createList(last, 3, false);//不带带头结点
	//连接
	connect(node1, nodelast);
	connect(node2, nodelast);

void connect(Node*& A, Node*& B){
	if(A==NULL) return ;
	Node* p=A;
	while(p->next!=NULL){
		p=p->next;
	}
	p->next=B;
}
如loading 和 thing  相同的无疑是i
误区:错误的认为可以简单的理解为长度做减法,然后求倒数第一个,按照位置求解。
正确解法,求长度,从最大相同长度的位置开始比较,即从较短的单词的第一个元素,较长的单词的移动到和较短的对照的长度的位置处比较,比较指针地址。
Node* search_commonNode(Node *a, Node *b){
	int c1 = getListLength(a, true);//自定义工具函数,在头文件中定义,计算长度 
	int c2 = getListLength(b, true);
	while(c1>c2){
		a=a->next;
		c1--;
	} 
	while(c1<c2){
		b=b->next;
		c2--;
	}
	while(a->next!=NULL and a->next!=b->next){
		a=a->next;
		b=b->next;
	}
	return a->next;
} 

上面这道题,看似简单实际上比较容易理解错误,应该自己先理清逻辑,然后自己独立实现试试。

作者:无涯明月

发文时间:2018-10-20  

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/83217668