There are two ways to do this. First is utilizing separate insert and append function (not leetcode-bound solution).
class node:
def __init__(self,data,next=None):
self.data=data
self.next=next
class linked_list:
def __init__(self):
self.head=None
def insert(self,data):
new_node=node(data)
new_node.next=self.head
self.head=new_node
def appending(self,data):
cur = self.head
while cur.next:
cur = cur.next
cur.next=node(data)
def printing(self):
cur=self.head
while cur.next:
print(cur.data)
cur = cur.next
print(cur.data)
LL=linked_list()
LL.insert(9)
LL.appending(9)
LL2=linked_list()
LL2.insert(5)
LL2.appending(2)
def adding(LL1,LL2):
head_1=LL1.head
head_2=LL2.head
list1=[]
list2=[]
while head_1.next:
list1.append(head_1.data)
head_1=head_1.next
list1.append(head_1.data)
while head_2.next:
list2.append(head_2.data)
head_2 = head_2.next
list2.append(head_2.data)
int1=int(','.join([str(x) for x in list1[::-1]]).replace(',',''))
int2 =int(','.join([str(x) for x in list2[::-1]]).replace(',',''))
num_list=[int(d) for d in str(int1+int2)][::-1]
LL3=linked_list()
for x in range(len(num_list)):
if x==0:
LL3.insert(num_list[x])
else:
LL3.appending(num_list[x])
LL3.printing()
adding(LL,LL2)
Another way is to follow Leetcode restrictions where we don't neccessarily have append and insert functions for LinkedList.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
list1=[]
list2=[]
while l1.next:
list1.append(l1.val)
l1=l1.next
list1.append(l1.val)
while l2.next:
list2.append(l2.val)
l2 = l2.next
list2.append(l2.val)
int1=int(','.join([str(x) for x in list1[::-1]]).replace(',',''))
int2 =int(','.join([str(x) for x in list2[::-1]]).replace(',',''))
num_list=[int(d) for d in str(int1+int2)][::-1]
cur=ListNode(1)
l3=ListNode(num_list[0])
l3.next=cur
cur=l3
for x in range(len(num_list)):
while cur.next:
cur=cur.next
cur.next=ListNode(num_list[x])
return l3.next.next