पाठ 5 / 42
Linked List
पॉइंटर से जुड़े nodes — node मिल जाने पर O(1) insert/delete।
Node + next
हर node एक मान और अगले node का संदर्भ रखता है:
[10|·]-> [20|·]-> [30|null]
तत्व मेमोरी में बिखरे होते हैं। कोई इंडेक्स गणित नहीं, इसलिए स्थिति k तक पहुँचना O(k) है, पर node जोड़ना/हटाना O(1)।
खज़ाने की खोज
हर सुराग सिर्फ़ बताता है कि अगला सुराग कहाँ है। आप सीधे सुराग 5 पर नहीं जा सकते — श्रृंखला का अनुसरण करते हैं। पर सुराग जोड़ने में सिर्फ़ दो नोट बदलने होते हैं।
head पर insert, reverse
Reverse करना classic है: एक बार चलें, हर next पॉइंटर को पीछे मोड़ें।
class Node:
def __init__(self, val, nxt=None):
self.val, self.next = val, nxt
def reverse(head):
prev = None
while head:
nxt = head.next # save
head.next = prev # flip
prev = head # advance
head = nxt
return prev # new headप्रकार और पैटर्न
Singly, doubly (prev वाला), और circular (tail head की ओर)। Fast/slow पॉइंटर cycle पहचानते हैं और मध्य खोजते हैं; dummy head node हटाते समय किनारे के मामले हटाता है।