4-13:链表的公共节点

问题:链表的公共节点

输入两个链表,找出他们的第一个公共节点。


ilistnode* findcommon(ilistnode* list1, ilistnode* list2)
{
	ilistnode* templist1 = list1;
	ilistnode* templist2 = list2;
	if (list1 == NULL || list2 == NULL)
		return NULL;
	int length1 = 0;
	for (; list1 != NULL; list1 = list1->getnext())
	{
		length1++;
	}
	int length2 = 0;
	for (; list2 != NULL; list2 = list2->getnext())
	{
		length2++;
	}
	if (length1 > length2)
	{
		int oset = length1 - length2;
		for (; oset != 0; oset--)
		{
			templist1 = templist1->getnext();
		}
	}
	else
	{
		int oset = length2 - length1;
		for (; oset != 0; oset--)
		{
			templist2 = templist2->getnext();
		}
	}
	while (templist1 != NULL&&templist2 != NULL)
	{
		if (templist1 != templist2)
		{
			templist1 = templist1->getnext();
			templist2 = templist2->getnext();
		}
		else
			break;
	}
	return templist1;
}

Category technology