題目描述:
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
1、首先匯入實現鍊錶結構的python模組(自定義)
chaintable
#用python實現資料結構鍊錶
class node:
'''定義節點類
data:節點儲存的資料
next_node:下乙個節點物件
'''def __init__(self,data,pnext=none):
self.data=data
self.next_node=pnext
def __repr__(self):
'''定義node的字元輸出
print為輸出data
'''return str(self.data)
'''鍊錶類:
屬性:煉表頭:head
鍊錶長度:length
方法:以下
'''class chaintable:
def __init__(self):
self.head=none
self.length=0
'判斷是否為空列表'
def isempty(self):
return self.length==0
'在鍊錶尾增加乙個節點'
item = none
if isinstance(dataornode, node):
item = dataornode
else:
item = node(dataornode)
if not self.head:
self.head=item
self.length+=1
else:
node=self.head
'迴圈至最後乙個節點'
while node.next_node:
node=node.next_node
node.next_node=item
self.length+=1
'刪除乙個節點'
def delete(self,index):
if self.isempty():
print("sorry,the chain table is empty")
return
if index<0 or index>=self.length:
print("error:out of index")
return
if index==0:
self.head=self.head.next_node
self.length-=1
return
index=0
node=self.head
pre_node=self.head
while node.next_node and index=self.length:
print("error:out of index")
return
index=0
node=self.head
while node.next_node and index=self.length:
print("error:out of index")
return
index=0
node=self.head
while node.next_node and index=self.length:
print("error:out of index")
return
item=none
if isinstance(dataornode,node):
item=dataornode
else:
item=node(dataornode)
if index==0:
item.next_node=self.head
self.head=item
self.length+=1
return
index=0
node=self.head
prev=self.head
while node.next_node and index'
node=node.next_node
else:
nlist+=str(node.data)
node=node.next_node
return nlist
def __getitem__(self, ind):
if self.isempty() or ind < 0 or ind >= self.length:
print("error: out of index")
return
return self.getitem(ind)
def __setitem__(self, ind, val):
if self.isempty() or ind < 0 or ind >= self.length:
print("error: out of index")
return
self.update(ind, val)
def __len__(self):
return self.length
2、實現題目要求
**:import chaintable as c
class solution(c.chaintable):
def __init__(self,l1,l2):
self.l1=l1
self.l2=l2
self.new_lst=self.mergetwolists(self.l1,self.l2)
def mergetwolists(self, l1, l2):
new_list=c.chaintable()
index1=0
index2=0
while(true):
if int(l1.getitem(index1))<=int(l2.getitem(index2)):
index1+=1
if index1==int(l1.length):
while index2結果:
請輸入l1:124
請輸入l2:134
1->1->2->3->4->4
合併兩個有序鍊錶
鍊錶的題目總是讓我很惆悵。動輒就會runtime error。比如這題,額外用了乙個節點的空間來儲存頭節點。我很不情願多用這個空間,不過貌似不行。貌似不行,實際可行,見附錄。把頭節點提出迴圈 實現類 class solution else if l1 null p next l1 if l2 nul...
合併兩個有序鍊錶
三個指標乙個儲存la鍊錶 乙個儲存lb鍊錶,乙個指向新的鍊錶。鍊錶的插入,兩個指標,乙個是head,乙個指向head後面的鏈,新插入的元素位於head後面。執行該 自己外加上class類。static class node public static void main string args st...
合併兩個有序鍊錶
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4思路 很簡單就是二路歸併的思想,時間複雜度o n definition for singly linked list.struct listno...