將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
示例:輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
def
mergetwolists
(self, l1, l2)
:if l1 is
none
:return l2
elif l2 is
none
:return l1
elif l1.val < l2.val:
l1.next
= self.mergetwolists(l1.
next
, l2)
return l1
else
: l2.
next
= self.mergetwolists(l1, l2.
next
)return l2
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。
示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.
def
removenthfromend
(self, head, n):if
not head or n<=0:
#鍊錶為空或者n無效
return head
p = listnode(-1
)#建造乙個虛擬節點,方便邊界處理
p.next
= head
#一次遍歷得到鍊錶長度
a = p
k =0while a.
next
: a = a.
next
k = k+
1if k#n無效
return head
#二次遍歷找到需要刪除的節點
b = p
num = k-n #需刪除的前乙個節點位置
while num >0:
b = b.
next
num = num-
1 b.
next
= b.
next
.next
#將指標指向刪除節點的後一位
return p.
next
給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動k個位置,其中k是非負數。
示例 :
輸入: 1->2->3->4->5->null, k = 2
輸出: 4->5->1->2->3->null
解釋:向右旋轉 1 步: 5->1->2->3->4->null
向右旋轉 2 步: 4->5->1->2->3->null
def
rotateright
(self, head, k):if
not head:
return
none
ifnot head.
next
:return head
old_tail = head
n =1while old_tail.
next
:#計算鍊錶長度
old_tail = old_tail.
next
n = n+
1 old_tail.
next
= head #構造成環狀
new_tail = head
m = n - k % n -
1while m:
new_tail = new_tail.
next
#新的尾結點的位置
m = m-
1 new_head = new_tail.
next
#新的頭結點的位置
new_tail.
next
=none
#切斷這個環
return new_head
順序表和煉表
定義 線性表是由n個具有相同特性的資料元素組成的有限序列,表中每個元素具有相同元素。邏輯上為連續的線性結構。常見的線性表 順序表,鍊錶 棧 佇列 字串 線性表根據物理儲存方式分為 順序表和煉表 線性表在邏輯上是線性結構,在物理上並不是連續的,線性表在物理上儲存時,通常是以陣列和鏈式結構的形式儲存。動...
順序表和煉表
1.名詞解釋 資料 對客觀事物的符號表示 資料元素 資料的基本單位,可由若干個資料項組成 資料項 資料的不可分割的最小單位 資料物件 性質相同的資料元素的集合,是資料的子集 資料結構 相互之間存在特定關係的資料元素的集合 關係描述資料元素之間的邏輯關係 物理結構 儲存結構 資料結構在計算機中的表示 ...
c 順序表和煉表
這節來說下順序表和煉表 1 集合中必存在唯一的 第乙個元素 2 集合中必存在唯一的 最後乙個元素 3 除第乙個元素外,其他的元素都只有乙個後繼 4 除最後乙個元素外,其他的元素都只有乙個前驅 把線性表中的節點按照邏輯次序儲存在一組連續的位址單元中,在計算機中以陣列的形式儲存的線性表。在順序表中每個節...