Wpis z mikrobloga

@NotABigFan: Kazdemu ustawionemu elementowi dodajesz flage visited. I zaczynasz na przemian iterowac po elementach wychodzac z dwoch headow. Jak napotkasz flage visited to znaczy ze drugi head juz to byl, czyli masz punkt wspolny.
@NotABigFan: Czy pod "modyfikowanie listy" podpada też przepinanie elementów? Bo jeśli tak, tobym odwrócił listy (O(n + m)), szedł dwoma wskaźnikami do momentu rozjazdu (j.w.) i ponownie odwrócił listy - jeśli jest potrzebne przywrócenie do stanu początkowego.
@NotABigFan: Jako start wybieramy po 1 wskaźniku na dowolny element z każdej z list (i pamiętamy je na boku jako startowe elementy list). Przesuwamy w pętli oba wskaźniki równocześnie o 1 element. Jeśli wrócimy do startowego elementu listy, to przeskakujemy wskaźnikiem na startowy element drugiej listy i iterujemy dalej. Jeśli oba wskaźniki wskazują na ten sam element to koniec.
@Demolicjon: Nie no mają wspólny sufiks (nie da się inaczej jeżeli się przecinają). Chodzi o ten pierwszy wspólny element. Rozrysuj sobie jeszcze jak wyglądają te odwrócone listy i zobaczysz, że tam nie ma rozjazdu ( ͡° ͜ʖ ͡°) Zgubisz po prostu jeden prefiks listy.

@boo007: Nie za bardzo kumam. Jak wrócimy do startowego elementu skoro te listy są acykliczne?
@NotABigFan: Wydaje mi się, że za bardzo kombinuję, ale here goes:

Przypuścmy na chwilę, że te listy trzymają liczby całkowite (potem do tego wrócę). Znajdujemy minimum spośród wszystkich elementów obu list, robimy na nim -1 (żeby otrzymać w ten sposób element unikalny), a następnie wpisujemy go wszędzie do pierwszej listy. Na koniec przechodzimy po drugiej liście szukając pierwszego wystąpienia tego unikalnego elementu.

Jeśli nie mamy do czynienia z liczbami ani innym
@NotABigFan: tak to jest jak się człowiek spieszy i nie doczytać treści. Mój algorytm miał wyglądać jakoś tak w czymś funkcyjnym:

Xs, Ys - wejściowe listy

Znajdzel nil yss = Znajdzel Ys yss
Znajdzel xss nil = Znajdzel xss xs
Znajdzel x:xss y:yss = if(x==y) return x
Else Znajdzel xss yss

Uruchamiamy
Znajdzel Xs ys

Ten kod powinien zwrócić wspólny element, można jeszcze gdzieś trzymać indeksy, jeśli chcemy znalesc miejsce, ale