@@ -20,14 +20,24 @@ def __len__(self):
20
20
def is_empty (self ):
21
21
return self .size == 0
22
22
23
+ def search (self , key ):
24
+ curr_node = self .head
25
+ while curr_node is not None :
26
+ if curr_node .key == key :
27
+ return curr_node
28
+ curr_node = curr_node .next
29
+ if curr_node is self .head :
30
+ return None
31
+ return None
32
+
23
33
def __str__ (self ):
24
34
"""
25
35
For printing the linked list.
26
36
"""
27
37
elements = []
28
38
current_node = self .head
29
39
while current_node is not None :
30
- elements .append (current_node . data )
40
+ elements .append (str ( current_node ) )
31
41
current_node = current_node .next
32
42
if current_node == self .head :
33
43
break
@@ -43,19 +53,19 @@ class DoublyLinkedList(LinkedList):
43
53
>>> from pydatastructs import DoublyLinkedList
44
54
>>> dll = DoublyLinkedList()
45
55
>>> dll.append(6)
46
- >>> dll[0].data
56
+ >>> dll[0].key
47
57
6
48
- >>> dll.head.data
58
+ >>> dll.head.key
49
59
6
50
60
>>> dll.append(5)
51
61
>>> dll.append_left(2)
52
62
>>> str(dll)
53
- '[2, 6, 5]'
54
- >>> dll[0].data = 7.2
55
- >>> dll.extract(1).data
63
+ "['2', '6', '5']"
64
+ >>> dll[0].key = 7.2
65
+ >>> dll.extract(1).key
56
66
6
57
67
>>> str(dll)
58
- '[ 7.2, 5]'
68
+ "[' 7.2', '5']"
59
69
60
70
References
61
71
==========
@@ -72,7 +82,7 @@ def __new__(cls):
72
82
obj .size = 0
73
83
return obj
74
84
75
- def append_left (self , data ):
85
+ def append_left (self , key , data = None ):
76
86
"""
77
87
Pushes a new node at the start i.e.,
78
88
the left of the list.
@@ -83,9 +93,9 @@ def append_left(self, data):
83
93
data
84
94
Any valid data to be stored in the node.
85
95
"""
86
- self .insert_at (0 , data )
96
+ self .insert_at (0 , key , data )
87
97
88
- def append (self , data ):
98
+ def append (self , key , data = None ):
89
99
"""
90
100
Appends a new node at the end of the list.
91
101
@@ -95,9 +105,9 @@ def append(self, data):
95
105
data
96
106
Any valid data to be stored in the node.
97
107
"""
98
- self .insert_at (self .size , data )
108
+ self .insert_at (self .size , key , data )
99
109
100
- def insert_after (self , prev_node , data ):
110
+ def insert_after (self , prev_node , key , data = None ):
101
111
"""
102
112
Inserts a new node after the prev_node.
103
113
@@ -112,7 +122,7 @@ def insert_after(self, prev_node, data):
112
122
Any valid data to be stored in the node.
113
123
"""
114
124
self .size += 1
115
- new_node = LinkedListNode (data ,
125
+ new_node = LinkedListNode (key , data ,
116
126
links = ['next' , 'prev' ],
117
127
addrs = [None , None ])
118
128
new_node .next = prev_node .next
@@ -124,7 +134,7 @@ def insert_after(self, prev_node, data):
124
134
if new_node .next is None :
125
135
self .tail = new_node
126
136
127
- def insert_before (self , next_node , data ):
137
+ def insert_before (self , next_node , key , data = None ):
128
138
"""
129
139
Inserts a new node before the next_node.
130
140
@@ -139,7 +149,7 @@ def insert_before(self, next_node, data):
139
149
Any valid data to be stored in the node.
140
150
"""
141
151
self .size += 1
142
- new_node = LinkedListNode (data ,
152
+ new_node = LinkedListNode (key , data ,
143
153
links = ['next' , 'prev' ],
144
154
addrs = [None , None ])
145
155
new_node .prev = next_node .prev
@@ -150,7 +160,7 @@ def insert_before(self, next_node, data):
150
160
else :
151
161
self .head = new_node
152
162
153
- def insert_at (self , index , data ):
163
+ def insert_at (self , index , key , data = None ):
154
164
"""
155
165
Inserts a new node at the input index.
156
166
@@ -173,7 +183,7 @@ def insert_at(self, index, data):
173
183
raise IndexError ('%d index is out of range.' % (index ))
174
184
175
185
self .size += 1
176
- new_node = LinkedListNode (data ,
186
+ new_node = LinkedListNode (key , data ,
177
187
links = ['next' , 'prev' ],
178
188
addrs = [None , None ])
179
189
if self .size == 1 :
@@ -300,19 +310,19 @@ class SinglyLinkedList(LinkedList):
300
310
>>> from pydatastructs import SinglyLinkedList
301
311
>>> sll = SinglyLinkedList()
302
312
>>> sll.append(6)
303
- >>> sll[0].data
313
+ >>> sll[0].key
304
314
6
305
- >>> sll.head.data
315
+ >>> sll.head.key
306
316
6
307
317
>>> sll.append(5)
308
318
>>> sll.append_left(2)
309
319
>>> str(sll)
310
- '[2, 6, 5]'
311
- >>> sll[0].data = 7.2
312
- >>> sll.extract(1).data
320
+ "['2', '6', '5']"
321
+ >>> sll[0].key = 7.2
322
+ >>> sll.extract(1).key
313
323
6
314
324
>>> str(sll)
315
- '[ 7.2, 5]'
325
+ "[' 7.2', '5']"
316
326
317
327
References
318
328
==========
@@ -329,7 +339,7 @@ def __new__(cls):
329
339
obj .size = 0
330
340
return obj
331
341
332
- def append_left (self , data ):
342
+ def append_left (self , key , data = None ):
333
343
"""
334
344
Pushes a new node at the start i.e.,
335
345
the left of the list.
@@ -340,9 +350,9 @@ def append_left(self, data):
340
350
data
341
351
Any valid data to be stored in the node.
342
352
"""
343
- self .insert_at (0 , data )
353
+ self .insert_at (0 , key , data )
344
354
345
- def append (self , data ):
355
+ def append (self , key , data = None ):
346
356
"""
347
357
Appends a new node at the end of the list.
348
358
@@ -352,9 +362,9 @@ def append(self, data):
352
362
data
353
363
Any valid data to be stored in the node.
354
364
"""
355
- self .insert_at (self .size , data )
365
+ self .insert_at (self .size , key , data )
356
366
357
- def insert_after (self , prev_node , data ):
367
+ def insert_after (self , prev_node , key , data = None ):
358
368
"""
359
369
Inserts a new node after the prev_node.
360
370
@@ -369,7 +379,7 @@ def insert_after(self, prev_node, data):
369
379
Any valid data to be stored in the node.
370
380
"""
371
381
self .size += 1
372
- new_node = LinkedListNode (data ,
382
+ new_node = LinkedListNode (key , data ,
373
383
links = ['next' ],
374
384
addrs = [None ])
375
385
new_node .next = prev_node .next
@@ -378,7 +388,7 @@ def insert_after(self, prev_node, data):
378
388
if new_node .next is None :
379
389
self .tail = new_node
380
390
381
- def insert_at (self , index , data ):
391
+ def insert_at (self , index , key , data = None ):
382
392
"""
383
393
Inserts a new node at the input index.
384
394
@@ -401,7 +411,7 @@ def insert_at(self, index, data):
401
411
raise IndexError ('%d index is out of range.' % (index ))
402
412
403
413
self .size += 1
404
- new_node = LinkedListNode (data ,
414
+ new_node = LinkedListNode (key , data ,
405
415
links = ['next' ],
406
416
addrs = [None ])
407
417
if self .size == 1 :
@@ -524,19 +534,19 @@ class SinglyCircularLinkedList(SinglyLinkedList):
524
534
>>> from pydatastructs import SinglyCircularLinkedList
525
535
>>> scll = SinglyCircularLinkedList()
526
536
>>> scll.append(6)
527
- >>> scll[0].data
537
+ >>> scll[0].key
528
538
6
529
- >>> scll.head.data
539
+ >>> scll.head.key
530
540
6
531
541
>>> scll.append(5)
532
542
>>> scll.append_left(2)
533
543
>>> str(scll)
534
- '[2, 6, 5]'
535
- >>> scll[0].data = 7.2
536
- >>> scll.extract(1).data
544
+ "['2', '6', '5']"
545
+ >>> scll[0].key = 7.2
546
+ >>> scll.extract(1).key
537
547
6
538
548
>>> str(scll)
539
- '[ 7.2, 5]'
549
+ "[' 7.2', '5']"
540
550
541
551
References
542
552
==========
@@ -545,7 +555,7 @@ class SinglyCircularLinkedList(SinglyLinkedList):
545
555
546
556
"""
547
557
548
- def insert_after (self , prev_node , data ):
558
+ def insert_after (self , prev_node , key , data = None ):
549
559
"""
550
560
Inserts a new node after the prev_node.
551
561
@@ -559,11 +569,12 @@ def insert_after(self, prev_node, data):
559
569
data
560
570
Any valid data to be stored in the node.
561
571
"""
562
- super (SinglyCircularLinkedList , self ).insert_after (prev_node , data )
572
+ super (SinglyCircularLinkedList , self ).\
573
+ insert_after (prev_node , key , data )
563
574
if prev_node .next .next == self .head :
564
575
self .tail = prev_node .next
565
576
566
- def insert_at (self , index , data ):
577
+ def insert_at (self , index , key , data = None ):
567
578
"""
568
579
Inserts a new node at the input index.
569
580
@@ -576,7 +587,7 @@ def insert_at(self, index, data):
576
587
data
577
588
Any valid data to be stored in the node.
578
589
"""
579
- super (SinglyCircularLinkedList , self ).insert_at (index , data )
590
+ super (SinglyCircularLinkedList , self ).insert_at (index , key , data )
580
591
if self .size == 1 :
581
592
self .head .next = self .head
582
593
new_node = self .__getitem__ (index )
@@ -618,27 +629,27 @@ class DoublyCircularLinkedList(DoublyLinkedList):
618
629
>>> from pydatastructs import DoublyCircularLinkedList
619
630
>>> dcll = DoublyCircularLinkedList()
620
631
>>> dcll.append(6)
621
- >>> dcll[0].data
632
+ >>> dcll[0].key
622
633
6
623
- >>> dcll.head.data
634
+ >>> dcll.head.key
624
635
6
625
636
>>> dcll.append(5)
626
637
>>> dcll.append_left(2)
627
638
>>> str(dcll)
628
- '[2, 6, 5]'
629
- >>> dcll[0].data = 7.2
630
- >>> dcll.extract(1).data
639
+ "['2', '6', '5']"
640
+ >>> dcll[0].key = 7.2
641
+ >>> dcll.extract(1).key
631
642
6
632
643
>>> str(dcll)
633
- '[ 7.2, 5]'
644
+ "[' 7.2', '5']"
634
645
635
646
References
636
647
==========
637
648
638
649
.. [1] https://en.wikipedia.org/wiki/Doubly_linked_list#Circular_doubly_linked_lists
639
650
640
651
"""
641
- def insert_after (self , prev_node , data ):
652
+ def insert_after (self , prev_node , key , data = None ):
642
653
"""
643
654
Inserts a new node after the prev_node.
644
655
@@ -652,11 +663,12 @@ def insert_after(self, prev_node, data):
652
663
data
653
664
Any valid data to be stored in the node.
654
665
"""
655
- super (DoublyCircularLinkedList , self ).insert_after (prev_node , data )
666
+ super (DoublyCircularLinkedList , self )\
667
+ .insert_after (prev_node , key , data )
656
668
if prev_node .next .next == self .head :
657
669
self .tail = prev_node .next
658
670
659
- def insert_before (self , next_node , data ):
671
+ def insert_before (self , next_node , key , data = None ):
660
672
"""
661
673
Inserts a new node before the next_node.
662
674
@@ -670,11 +682,12 @@ def insert_before(self, next_node, data):
670
682
data
671
683
Any valid data to be stored in the node.
672
684
"""
673
- super (DoublyCircularLinkedList , self ).insert_before (next_node ,data )
685
+ super (DoublyCircularLinkedList , self ).\
686
+ insert_before (next_node , key , data )
674
687
if next_node == self .head :
675
688
self .head = next_node .prev
676
689
677
- def insert_at (self , index , data ):
690
+ def insert_at (self , index , key , data = None ):
678
691
"""
679
692
Inserts a new node at the input index.
680
693
@@ -687,7 +700,8 @@ def insert_at(self, index, data):
687
700
data
688
701
Any valid data to be stored in the node.
689
702
"""
690
- super (DoublyCircularLinkedList , self ).insert_at (index , data )
703
+ super (DoublyCircularLinkedList , self ).\
704
+ insert_at (index , key , data )
691
705
if self .size == 1 :
692
706
self .head .next = self .head
693
707
self .head .prev = self .head
0 commit comments