node getCyclicLinkedListMeetNode(root):
slow = root
fast = root
while fast != null && fast.next != null:
slow = slow.next
fast = fast.next.next
if slow == fast:
break
meet = null
if slow == fast:
meet = fast
return meet
void fixCyclicLinkedList(root):
meet = getCyclicLinkedListMeetNode(root)
// not cyclic
if meet == null:
return
// if last node connects to root, then meet is root
if meet == root:
// go to last node
last = root
while last.next != root:
last = last.next
// else go to the last node from meet
else:
last = meet
n = root
while n.next != last.next:
n = n.next
last = last.next
// fix
last.next = null
cases:
// last connects to other than root
meet
1-->2-->3
| |
-----
meet
1-->2-->3-->4
| |
-----
// last connects to root
meet
1-->2-->3
| |
---------
meet
1-->2
| |
-----
meet
1--
| |
---
No comments:
Post a Comment