Leecode 的 21 題連結串列合併與 148 題結合的題目連結串列排序的結合的題目
題目難易程度: Easy
將兩個升序連結串列合併為一個新的 升序 連結串列並返回。新連結串列是透過拼接給定的兩個連結串列的所有節點組成的。
示例 1:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
連結串列分單連結串列與雙連結串列,還有環連結串列等形式,就單連結串列而言,連結串列結構的其他操作因在另外一張文章有寫,在這裡就不再多加敘述。
思路:目前本題的連結串列是升序連結串列,做法如下:使用遞迴完成本題。我做這兩題都是用到遞迴,基本的套路一樣。請認真觀察,這個套路很好用。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
new_node_list = None
if l1 == None:
return l2
if l2 == None:
return l1
if l1.val > l2.val:
new_node_list = l2
new_node_list.next = self.mergeTwoLists(l1,l2.next)
else:
new_node_list = l1
new_node_list.next = self.mergeTwoLists(l1.next,l2)
return new_node_list
我在上上個星期面試阿里的第一面面試時,上機操作的題目是:兩個無續的連結串列,合併成一個有序的連結串列,步驟也操作,只是將兩個無序連結串列排序,用上述的合併方法整合就行。以下是一種排序方法。我的寫排序是 Leecode 第 148 題個人思路破解,該題難度:中等。
# 寫法很簡單的排序,但是佔用記憶體空間上升。
class Solution:
def sortList(self, head: ListNode) -> ListNode:
list_tmp = []
if head:
while head.next:
list_tmp.append(head.val)
head = head.next
list_tmp.append(head.val)
list_data_sort = sorted(list_tmp)
def nodeListSort(list_data_sort,i=0):
new_list_node = None
if i < len(list_data_sort):
new_list_node = ListNode(list_data_sort[i])
i += 1
new_list_node.next = nodeListSort(list_data_sort,i)
return new_list_node
return nodeListSort(list_data_sort)
做完上面那道題後,發現 Leecode 有類似的題目:
Leecode18. 刪除連結串列的節點
題目難易程度: Easy
給定單向連結串列的頭指標和一個要刪除的節點的值,定義一個函式刪除該節點。
返回刪除後的連結串列的頭節點。
示例 1:
輸入: head = [4,5,1,9], val = 5
輸出: [4,1,9]
解釋: 給定你連結串列中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 1 -> 9.
示例 2:
輸入: head = [4,5,1,9], val = 1
輸出: [4,5,9]
解釋: 給定你連結串列中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該連結串列應變為 4 -> 5 -> 9.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
new_list_node = None
if head.val == val:
new_list_node = head.next
return new_list_node
else:
new_list_node = head
new_list_node.next = self.deleteNode(head.next, val)
return new_list_node
相關文章
- [每日一題] 第十八題:合併兩個排序的連結串列每日一題排序
- 反轉連結串列、合併連結串列、樹的子結構
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- 合併K個排序連結串列排序
- 單連結串列的排序問題排序
- leetcode題目解析(js)--連結串列LeetCodeJS
- 連結串列專題——面試中常見的連結串列問題面試
- leecode.23. 合併K個升序連結串列
- leetcode:21. 合併兩個有序連結串列(連結串列,簡單)LeetCode
- LeetCode刷題記125-148. 排序連結串列LeetCode排序
- JZ-016-合併兩個排序的連結串列排序
- 【C++】“反轉連結串列”相關的題目C++
- 連結串列合併-排序-logo列印參考排序Go
- 148. 排序連結串列排序
- 連結串列專題
- 合併兩個有序連結串列
- LeetCode 23. 合併K個排序連結串列LeetCode排序
- leetcode23. 合併K個排序連結串列LeetCode排序
- 單連結串列建立連結串列出現問題
- 遞迴:21. 合併兩個有序連結串列遞迴
- 每日leetcode——21. 合併兩個有序連結串列LeetCode
- 【連結串列問題】刪除單連結串列的中間節點
- 連結串列(LinkedList)解題總結
- LeetCode連結串列專題LeetCode
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 演算法題中的連結串列演算法
- 牛客網高頻演算法題系列-BM4-合併兩個排序的連結串列演算法排序
- 23. 合併K個元素的有序連結串列
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- Leetcode 21 合併兩個有序連結串列 學習感悟LeetCode
- 【LeetCode Hot 100】21. 合併兩個有序連結串列LeetCode
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 牛客網高頻演算法題系列-BM5-合併k個已排序的連結串列演算法排序
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- Golang從合併連結串列聊遞迴Golang遞迴
- 連結串列反轉問題