1
- class Element :
2
- def __init__ (self , elem ):
3
- self .element = elem
4
- # self.current = None
5
- self .next = None
6
- print (self .element , self .next )
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Sat Nov 23 18:08:47 2019
7
4
8
- class LinkedList :
9
- def __init__ (self , head = None ):
10
- self .head = head
11
- # print(self.head)
5
+ @author: Sinha
6
+ """
12
7
13
- def append_linked (self , value ):
14
- current = self .head
15
- if self .head :
8
+ class Node :
9
+ # Constructor to create a Node
10
+ def __init__ (self , node ):
11
+ self .value = node
12
+ self .next = None
13
+
14
+ class LinkedList :
15
+ def __init__ (self ):
16
+ self .head = None
17
+ self .count = 0
18
+ self .linked_list = {}
19
+
20
+ # Insert/append to Linked List
21
+ def insert (self , element ):
22
+ # Node(elem)- can't have, bcoz it doesn't make elem
23
+ # an object of Node/node but elem stays int/same data type as passed.
24
+ if self .head == None :
25
+ self .head = element
26
+ # print("Head:{}".format(self.head.value))
27
+ else :
28
+ current = self .head
16
29
while current .next :
17
30
current = current .next
18
- # print(current)
19
- current .next = value
20
- # print(current.next)
21
- else :
22
- self .head = value
23
- def linked_list_view (self ):
31
+ current .next = element
32
+ # print(current.next.value)
33
+
34
+ # Traverse a Linked List
35
+ def traverse (self ):
36
+ current = self .head
37
+ while current :
38
+ print (current .value )
39
+ current = current .next
40
+
41
+ # Determine len of Linked List
42
+ def len_linked_list (self ):
43
+ self .count = 0
24
44
current = self .head
25
- count = 0
26
- if self .head :
27
- print ("if:{}" .format (current .element ))
28
- while current :
29
- print ("while:{}" .format (current .element ))
45
+ while current :
46
+ self .linked_list [self .count ] = current .value
47
+ current = current .next
48
+ self .count += 1
49
+ return self .count
50
+
51
+ # Insert node at nth position
52
+ def nth_insert (self , elem , n ):
53
+ len_ = self .len_linked_list ()
54
+ if n == 0 :
55
+ self .head = elem
56
+ elif n <= len_ :
57
+ current = self .head
58
+ for i in range (0 , n - 1 ):
30
59
current = current .next
31
-
32
-
33
- def delete_first (self ):
34
- if self .head :
35
- self .head = self .head .next
60
+ elem .next = current .next
61
+ current .next = elem
36
62
else :
37
- self .head = None
38
-
39
- def insert_first (self , new_element ):
40
- if self .head :
41
- self .head , new_element .next = new_element , self .head
63
+ return "Invalid n"
64
+
65
+ # Delete node from nth position
66
+ def nth_delete (self , n ):
67
+ if n == 0 :
68
+ self .head = self .head .next
69
+ elif n <= self .count :
70
+ current = self .head
71
+ for i in range (0 , n - 1 ):
72
+ current = current .next
73
+ current .next = current .next .next
74
+ return self .len_linked_list ()
42
75
else :
43
- self .head = new_element
44
-
45
-
46
-
47
-
76
+ return "Invalid position"
77
+
78
+ # Reverse Linked List - Iterative Method
79
+ def reverse_iteration (self ):
80
+ prev = None
81
+ current = self .head
82
+ temp = self .head
83
+ while current :
84
+ temp = temp .next
85
+ current .next = prev
86
+ prev = current
87
+ current = temp
88
+ self .head = prev
89
+ return self .traverse ()
90
+
91
+ # Delete Linked List completely freeing memory
92
+ def delete_list (self ):
93
+ prev , current = self .head , self .head
94
+ while current :
95
+ prev = current .next
96
+ del current .value
97
+ current = prev
98
+ print ("Linked List Deleted" )
99
+
100
+ def recursion_traversal (self , node ):
101
+ if node :
102
+ print (node .value )
103
+ self .recursion_traversal (node .next )
104
+ return
105
+
106
+ def reverse_recursion_traversal (self , node ):
107
+ if node :
108
+ self .reverse_recursion_traversal (node .next )
109
+ print (node .value )
110
+ return
111
+
112
+
0 commit comments