Skip to content

Instantly share code, notes, and snippets.

@kumarsuraj9450
Created June 13, 2020 07:48
Show Gist options
  • Save kumarsuraj9450/f9587faae09b978f6635be4aad0d619c to your computer and use it in GitHub Desktop.
Save kumarsuraj9450/f9587faae09b978f6635be4aad0d619c to your computer and use it in GitHub Desktop.
import os,msvcrt
class node_ll:
def __init__(self, data = None):
self.val = data
self.pointer = None
def __repr__(self):
return str(self.val)
class LinkedList :
# node = 7
def __init__(self):
self.headNode = node_ll()
def __len__(self):
_,total_nodes = self.nodes()
return total_nodes
def show(self):
print("VLAUES IN LINKED LIST : -")
n = self.headNode
while n.pointer != None :
print(n.val , end = " -> ")
n = n.pointer
print(n.val)
def add_node(self,value = None):
n = self.headNode
if n.val == None: self.headNode.val = value
else:
while n.pointer != None:
n = n.pointer
n.pointer = node_ll(value)
# self.nodes +=1
def pop(self):
n = self.headNode
temp = self.headNode
while True:
if n.pointer == None:
temp.pointer = None
break
n = n.pointer
temp = n
# self.nodes -= 1
def remove_duplicates(self):
values = set()
n = self.headNode
while True:
if n.val not in values:
values.add(n.val)
n = n.pointer
else:
# print(f'this node = {n.val}, next = {n.pointer.val}')
n.val = n.pointer.val
n.pointer = n.pointer.pointer
# if n.val not in values: values.add(n.val)
if n.pointer == None: break
# print(n.val)
# n = n.pointer
def kthNode(self, k = 0):
if k < 0:
n = self.headNode
nodes = 0
while True:
nodes += 1
if n.pointer == None: break
n = n.pointer
n = self.headNode
i = 0
while i < nodes + k+1:
if i == nodes+k: return(n.val)
n = n.pointer
i += 1
else:
n = self.headNode
while k != 0:
k -= 1
if k == 0: return(n.val)
n = n.pointer
return n.val
def nodes(self):
values = []
n = self.headNode
total_nodes = 0
while True:
values.append(n.val)
if n.pointer == None: break
n = n.pointer
total_nodes += 1
return values , total_nodes
def __getitem__(self, kth):
return self.kthNode(kth)
def __bool__(self):
return self.headNode.val != None
def __str__(self):
values , _ = self.nodes()
values = list(map(str,values))
return ' -> '.join(values)
def __repr__(self):
return self.__str__()
def __add__(self, other):
assert(isinstance(other, LinkedList))
n1 = self.headNode
n2 = other.headNode
new_list = self.__class__()
quo = 0
while True:
try:
v1 = n1.val
n1 = n1.pointer
except: v1 = 0
try:
v2 = n2.val
n2 = n2.pointer
except: v2 = 0
s = v1+v2
if quo: s+=1
rem = s%10
quo = s//10
# print(rem)
new_list.add_node(rem)
if n1 == None and n2 == None: break
return new_list
# else: raise Exception
def isPalindrome(self):
stack = []
slow = self.headNode
fast = self.headNode
odd_flag = True
while True:
stack.append(slow.val)
if fast.pointer.pointer: fast = fast.pointer.pointer
else:
fast = fast.pointer
odd_flag = False
# print(fast)
if fast.pointer == None: break
slow = slow.pointer
if odd_flag : slow = slow.pointer
while True:
if slow.pointer : slow = slow.pointer
else : break
if stack.pop() != slow.val: return False
return True
list1 = LinkedList()
list1.add_node(1)
list1.add_node(2)
list1.add_node(3)
list1.add_node(4)
list1.add_node(3)
list1.add_node(2)
list1.add_node(1)
print(list1.isPalindrome())
# print(list1)
# list2 = LinkedList()
# list2.add_node(5)
# list2.add_node(9)
# list2.add_node(2)
# print(list2)
# n = list1 + list2
# print(n)
# n.show()
# n1 ,n2 = list1.headNode, list2.headNode
# while True:
# try:
# v1 = n1.val
# n1 = n1.pointer
# except: v1 = 0
# try:
# v2 = n2.val
# n2 = n2.pointer
# except: v2 = 0
# v = 0
# while v != 5:
# os.system('cls')
# print('1. Add value to LL \n2. See values \n3. Remove Duplicates \n5. Exit')
# v = int(input('Enter choice :-'))
# if v==1:
# os.system('cls')
# value = 0
# while value != 'q' and value != 'Q':
# value = input('Enter Values to add (at the end) in Linked List :-> ')
# if value != 'q' and value != 'Q':
# list1.add_node(value)
# if v==2:
# list1.show()
# msvcrt.getch()
# if v==3:
# list1.remove_duplicates()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment