How to Add Nodes to Linked Lists in Python
This post discusses how to add nodes to a linked list as well as display the contents of a linked list in Python.
While linked lists are mainly associated with pointers, a concept that has direct usage in python, this post deals with basic methods on linked lists just to understand algorithmic concepts. It may be interesting to note that python variables for most data-types are actually internally treated as pointers!
Prerequisites: Basics of Python classes and objects
What are Linked Lists?
Linked lists are basically individual elements, called nodes, holding some data that are linked with one or more other nodes to form a complete sequence. It is obvious, therefore, that they’re implemented using pointers.
For a more detailed explanation, refer to this.
NOTE: The implementation here does not use the LList mentioned in the above link. Also, this post deals with singly-linked lists
Add to Linked Lists – Nodes
To add nodes to a linked list is to attach a new node to an existing linked list. New nodes may be added to a linked list at the beginning, at the end or somewhere in the middle (in here, it in a sorted linked list).
Consider the following program,
class Node:
def __init__(self,val,link):
self.data = val
self.next = link
start = None
end = None
#Variables to hold first, last nodes
def CreateNewNode(value): #Data to be stored in new node
newNode = Node(value,None)
return newNode
def AddToBegin(nod): #The node to be added
global start
global end
if not start:
start = nod
end = nod
else:
nod.next = start
start = nod
def AddToEnd(nod):
global start
global end
if not end:
start = nod
end = nod
else:
end.next = nod
end = nod
def AddToSorted(nod): #Sorted in Ascending Order
global start
global end
if not start:
start = nod
end = nod
else:
if start.data>=nod.data: #Add go beginning
nod.next = start
start = nod
else:
temp = start
flag = False
while temp.next:
if temp.next.data>=nod.data:
nod.next = temp.next
temp.next = nod
flag = True
break
else:
temp = temp.next
if not flag:
end.next = nod #Add to end
end = nod
def Display():
global start
global end
temp = start
print "START","->",
while temp:
print temp.data,"->",
temp = temp.next
print "END"Add Nodes to Linked List at Beginning in Python
Adding node to the beginning is simply to check if it is the first element (if start is None) and add it as the first node and make start and end, both point to this new node. Otherwise, we make the existing first element as the next of the new node and make the start point to the new node.
Add to Linked List at End in Python
Adding to the end of the list is to first again check if this is the first element (if end is None) and add it as the end as well as start node (the one and only node). Otherwise, we simply make the new node as the next of the existing end node and then make endpoint to the new node.
Add to Linked List inĀ Ascending Sorted
Adding to sorted, we first check if it is the first element and perform the same operation as in the above cases. If not, we check whether it is lesser than the first element. If so, we add it to the beginning as in case 1. Otherwise, we start a while loop. We keep checking to find the first node that has data greater than or equal to the new node. Note that we do this process on temp.next and not on temp itself. That’s because, in order to insert, we’ll need the node located previous to the firsts greater node we found!
When found, we make the new node point to this first greater node. Then make its previous node point to the new node, hence re-establishing the links to include the new node between the first greater node and its previous node.
Displaying the List
This is one of the simplest processes. We simply start a while loop, reassigning the temp variable to the next node and display the contents of temp until temp becomes None. That is because, after we display the last node, its next will hold None. Therefore, it indicates that the linked list has ended and so should the loop.
Creating A New Node in Linked List in Python
While creating a new node, we take the next element of the new node as None by default. We leave it up to the inserting functions to take care of assigning a logical value to this attribute. The data passed to this function is assigned to the data attribute. The node so created is returned by the function.
NOTE: If we keep adding to in a sorted manner to a Linked List from start, it will remain sorted. But using any other function to add, in between, will disrupt that order.
So that’s about adding and displaying nodes in a linked list.
Leave a Reply