Vérifier si deux listes de fusion. Si oui, où?

Cette question peut-être vieux, mais je ne pouvais pas penser à une réponse.

Dire, il y a deux listes de longueurs différentes, la fusion au point; comment savons-nous où le point de fusion est?

Conditions:

  1. Nous ne connaissons pas la longueur
  2. Nous devrions analyser chaque liste qu'une seule fois.

Vérifier si deux listes de fusion. Si oui, où?

  • la fusion signifie à partir de ce point, il n'y aura qu'une seule liste.
  • est la modification de la liste des admis?
  • twitpic.com/m8eqo voir ce pour plus d'idée abt problème, et la modification non autorisés
  • À partir de l'image vous pouvez utiliser ce que j'ai posté ci-dessous.
  • Je suis assez sûr qu'il ne fonctionne pas sans modification de la liste. (Ou tout simplement de le copier à un autre endroit pour éviter la restriction de l'analyser en une seule fois.)
  • Ce qui aurait été le point. Putain enquêteurs! Hehe
  • J'ai une proposition intéressante... en supposant que la commune de la queue de la liste est infiniment longue. Comment pouvez-vous trouver le nœud de l'intersection à l'aide de la constante de la mémoire?
  • posté ci-dessous une solution sans modification de la liste, les compteurs ou plus de O(N) itérations
  • Je vois d'ici les réponses qu'il y est une hypothèse qu'il n'y a pas de boucle dans les listes. Est-ce que vous vouliez dire? Qu'advient-il si il y a une boucle?
  • Si il y a une boucle dans une seule liste liée, il serait de la queue. Si deux listes ont fusionné, ils racontaient cette queue et serait d'une longueur infinie. (Ils n'ont pas besoin de partager la tête, comme ils pouvaient entrer dans le cycle sur des nœuds différents.)
  • Un exemple en golang O(n^2) et O(n) dans le temps de la complexité, une dernière à l'aide d'un jeu: play.golang.org/p/XpK3D_p-oq

InformationsquelleAutor rplusg | 2009-10-20