Προφανώς είναι λάθος. Και αυτό γιατί το p.next χάθηκε μόλις του έδωσες τιμή. Πρέπει πρώτα να το αντιγράψεις στο νέο Χ.next και μετά να ανανεώσεις το p.next.
Φαίνεται σωστό επειδή τα p, X,q τα προσεγγίζεις χωρίς χρήση δεικτών...θα μπορούσες να σβήσεις εντελώς το next πεδίο ή όπως θες να το πεις....