-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmergeTwoLists.py
64 lines (56 loc) · 1.63 KB
/
mergeTwoLists.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def addLast(self, node):
cur = node
while(cur.next != None):
cur = cur.next
cur.next = node
class MergeTwoLists():
def __init__(self, l1, l2):
self.l1 = l1
self.l2 = l2
self.ans = ListNode()
self.merge(self.l1, self.l2)
def getSize(self, LL):
if (LL == None):
return 0
elif (LL.next == None):
return 1
else:
ctr = 0
cur = LL
while (cur != None):
ctr += 1
cur = cur.next
return ctr
def getLastNode(self, LL):
if (LL == None):
return None
elif (LL.next == None):
return LL
else:
return self.getLastNode(LL.next)
def getFirstNode(self, LL):
if (LL == None):
return None
return LL
def remove(self, firstNode):
firstNode.next = None
def merge(self, l1, l2):
while (self.getSize(l1) > 0 and self.getSize(l2) > 0):
if (self.getFirstNode(l1).val < self.getFirstNode(l2).val):
self.ans.addLast(self.getFirstNode(l1))
else:
self.ans.addLast(self.getFirstNode(l2))
while (self.getSize(l1) > 0):
self.ans.addLast(self.remove(self.getFirstNode(l1)))
while (self.getSize(l2) > 0):
self.ans.addLast(self.remove(self.getFirstNode(l2)))
return self.ans
#
#
#
#
#