leetcode21:合併兩個有序連結串列
阿新 • • 發佈:2018-12-11
思想: 一.定義函式listTolistNode(列表轉連結串列) 1.初始化兩個一樣的連結串列head和dumpy 2.依次取列表y的元素,並呼叫ListNode函式得到l1 3.將l1的地址賦值給head.next(由於head和dumpy地址一樣,即head.next就是dumpy.next) 4.將head.next裡的地址賦值給head的地址,並且跳轉2直到取完列表y的所有元素 5.將dumpy.next裡地址賦值給dumpy地址,從而去除初始化的地址 二.定義函式listNodeTolist(連結串列轉列表) 1.將連結串列z地址的z.val新增進list,然後將z.next地址賦值給z地址,從而更新z。跳轉1直到z為空 三.定義函式mergeTwoLists(合併兩個有序連結串列) 1.初始化兩個一樣的連結串列head和dumpy 2.當l1和l2都不會空時,比較連結串列l1的l1.val和連結串列l2的l2.val大小。若l1.val小則轉3,反之轉4。若其一為空則轉6 3.將l1地址賦值給head.next,l1.next裡的地址賦值給l1 4.將l2地址賦值給head.next,l2.next裡的地址賦值給l2 5.將head.next裡的地址賦值給head,轉2 6.判斷l1是否為空,若否,將l1的地址賦值給head.next,否則轉7 7.判斷l2是否為空,若否,將l2的地址賦值給head.next,否則結束 class ListNode(object): def __init__(self, x): self.val = x self.next = None class Solution(object): def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ head = dummy = ListNode(-1) while l1 and l2: if l1.val < l2.val: head.next = l1 l1 = l1.next else: head.next = l2 l2 = l2.next head = head.next if l1: head.next = l1 if l2: head.next = l2 return dummy.next def listTolistNode(self, y): """ :type y: List :rtype: ListNode """ head = dumpy = ListNode(-1) for i in y: l1 = ListNode(i) head.next = l1 head = head.next return dumpy.next def listNodeTolist(self, z): list = [] while z: list.append(z.val) z = z.next return list print(Solution.listNodeTolist(Solution,Solution.mergeTwoLists(Solution,Solution.listTolistNode(Solution,[1,2,4]),Solution.listTolistNode(Solution,[1,3,4]))))