যখন একটি লিংকড লিস্টে সাইকেল ডিটেক্ট করতে হয়, তখন লিংকড লিস্টে এলিমেন্ট যোগ করার মেথড এবং লিংকড লিস্টে এলিমেন্ট পাওয়ার মেথড সংজ্ঞায়িত করা হয়। অন্য একটি মেথড সংজ্ঞায়িত করা হয় যা চেক করে হেড এবং রিয়ার মান একই কিনা। এই ফলাফলের উপর ভিত্তি করে সাইকেল ডিটেক্ট করা হয়।
উদাহরণ
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList_structure:
def __init__(self):
self.head = None
self.last_node = None
def add_vals(self, data):
if self.last_node is None:
self.head = Node(data)
self.last_node = self.head
else:
self.last_node.next = Node(data)
self.last_node = self.last_node.next
def get_node_val(self, index):
curr = self.head
for i in range(index):
curr = curr.next
if curr is None:
return None
return curr
def check_cycle(my_list):
slow_val = my_list.head
fast_val = my_list.head
while (fast_val != None and fast_val.next != None):
slow_val = slow_val.next
fast_val = fast_val.next.next
if slow_val == fast_val:
return True
return False
my_linked_list = LinkedList_structure()
my_list = input('লিংকড লিস্টের এলিমেন্টগুলো দিন ').split()
for elem in my_list:
my_linked_list.add_vals(int(elem))
my_len = len(my_list)
if my_len != 0:
vals = '0-' + str(my_len - 1)
last_ptr = input('ইন্ডেক্স [' + vals + '] দিন যেখানে লাস্ট নোড পয়েন্ট করবে (নথিং এন্টার করলে None-এ পয়েন্ট করবে): ').strip()
if last_ptr == '':
last_ptr = None
else:
last_ptr = my_linked_list.get_node_val(int(last_ptr))
my_linked_list.last_node.next = last_ptr
if check_cycle(my_linked_list):
print("লিংকড লিস্টে সাইকেল আছে")
else:
print("লিংকড লিস্টে সাইকেল নেই")
আউটপুট
লিংকড লিস্টের এলিমেন্টগুলো দিন 56 78 90 12 4 ইন্ডেক্স [0-4] দিন যেখানে লাস্ট নোড পয়েন্ট করবে (নথিং এন্টার করলে None-এ পয়েন্ট করবে): লিংকড লিস্টে সাইকেল নেই
ব্যাখ্যা
Node ক্লাস তৈরি করা হয়েছে।
প্রয়োজনীয় অ্যাট্রিবিউটসহ LinkedList_structure ক্লাস তৈরি করা হয়েছে।
এতে একটি __init__ ফাংশন রয়েছে যা প্রথম এলিমেন্ট অর্থাৎ head-কে None-এ ইনিশিয়ালাইজ করে।
add_vals নামক একটি মেথড সংজ্ঞায়িত করা হয়েছে, যা লিস্টে মান যোগ করতে সাহায্য করে।
get_node_val নামক একটি মেথড সংজ্ঞায়িত করা হয়েছে, যা লিংকড লিস্টে বর্তমান নোডের মান পেতে সাহায্য করে।
check_cycle নামক একটি মেথড সংজ্ঞায়িত করা হয়েছে, যা হেড এবং রিয়ার একই কিনা তা চেক করে, যা সাইকেল বোঝায়।
সাইকেল থাকলে True এবং না থাকলে False রিটার্ন করে।
LinkedList_structure-এর একটি ইনস্ট্যান্স তৈরি করা হয়েছে।
লিংকড লিস্টে এলিমেন্টগুলো যোগ করা হয়েছে।
এই লিংকড লিস্টে check_cycle মেথডটি কল করা হয়েছে।
আউটপুট কনসোলে প্রদর্শিত হয়েছে।