I am currently study the basic data structure and trying to implement everything as I go. can anyone give me some feedback about class LinkedList how to make the code more elegant. any review are appreciated.
class Node(object):
def __init__(self, data, n=None):
self.val = data
self.next = n
def get(self):
return self.data
def set(self, data):
self.val = data
def get_next_node(self):
return self.next
def set_next_node(self, data):
self.next.val = data
class SingleLinkedList(object):
"""
Single Linked List object
Args:
data(Node): Node
Attributes:
head(Node): single LinkedList head
"""
def __init__(self, data):
self.head = data
def __repr__(self):
"""
:return:
"""
cur = self.head
s = ''
while cur:
s += f'{cur.val}->'
cur = cur.next
return s
def __len__(self):
cur, cnt = self.head, 0
while cur:
cnt += 1
cur = cur.next
return cnt
def append(self, data):
if not self.head:
self.head = Node(data)
return
cur = self.head
while cur.next: cur = cur.next
cur.next = Node(data)
def insert_before_key(self, key, data):
cur = self.head
prev = Node(None)
while cur:
if cur.val == key:
node = Node(data)
node.next = cur
prev.next = node
break
prev = cur
cur = cur.next
self.head = prev.next
def insert_after_key(self, key, data):
cur = self.head
while cur:
if cur.val == key:
node = Node(data)
node.next = cur.next
cur.next = node
cur = cur.next
def delete(self, key):
if not self.head: return
dummy = cur = self.head
prev = None
while cur:
if cur.val == key and prev:
prev.next = cur.next
self.head = dummy
return
elif cur.val == key:
self.head = cur.next
return
prev = cur
cur = cur.next
def search(self, key):
cur = self.head
while cur and cur.val != key:
cur = cur.next
return cur or None
def reverse(self):
cur = self.head
prev = None
while cur:
nxt = cur.next
cur.next = prev
prev = cur
cur = nxt
self.head = prev