先行ノードとの単一リンクリストは関連しています(1)

単一リンクリストの一般的な演習(1)

2つの単一リンクリストが交差するかどうかを判断し、交差のノードを返します

思考分析

2つの単一チェーンの交差点であるかどうかを判断するには、2つのアプローチがあり
ます。1。最後に通過したノードまでの2つで、最後のセクションは在这里插入代码片ポイントアドレスが等しいと判断されます。2つのリンクリストの最後のノードのアドレスが同じである場合、リンクリストノードの少なくとも1つは互いに一致しています。ただし、この方法では交点を判別できず、交点があるかどうかを判別するだけです。
2. 2つのリンクリストの場合、配置方法を使用して、アイテムごとに比較できます。等しいリンクリストノードに遭遇した場合は、このノードに戻ることができます。ただし、2つのリンクリストは必ずしも同じ長さである必要はありません。最初に2つのリンクリストの違いをトラバースし、次に2つのリンクリストを同時に比較して、一致するノードを判別できます。

コード

node* isxiangjiao(plist list1, plist list2)
{
    
    
	deterlist(list1);
	deterlist(list2);   //一直遍历到最后一个节点,判断最后一个节点地址是否相等   这种方法不能确定交点,只能去确定是否相交
	

	//思路:先求出差值,让长的先跑差值个。然后同时往后跑,边跑边比较,一旦相等,返回此节点
	int len1 = getlength(list1);
	int len2 = getlength(list2);
	plist p = list1;
	plist q = list2;

	if (len1 > len2)
	{
    
    
		for (int i = 0; i < len1 - len2; i++)
		{
    
    
			p = p->next;
		}
	}
	else
	{
    
    
		for (int i = 0; i < len2 - len1; i++)
		{
    
    
			q = q->next;
		}
	}
	while (p != NULL && q != NULL)
	{
    
    
		if (p == q)
		{
    
    
			return p;
		}
		p = p->next;
		q = q->next;
	}
	return NULL;
}

おすすめ

転載: blog.csdn.net/ALITAAAA/article/details/105667897