python 合併兩個有序連結串列
阿新 • • 發佈:2018-11-14
參考了這個博主的答案(https://blog.csdn.net/gleam_/article/details/80149010),之前遞迴一直學的不是太好,但真的想通了以後寫起來很神清氣爽。
1. 遞迴的思路
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ if l1==None and l2==None: return None if l1==None: return l2 if l2==None: return l1 if l1.val<=l2.val: l1.next=self.mergeTwoLists(l1.next,l2) return l1 else: l2.next=self.mergeTwoLists(l1,l2.next) return l2
2. 非遞迴(這個是參看這個博主小哥的,https://blog.csdn.net/honeyaya/article/details/52915759)
# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回合併後列表 def Merge(self, pHead1, pHead2): # write code here if pHead1==None and pHead2==None: return None elif pHead1!=None and pHead2==None: return pHead1 elif pHead1==None and pHead2!=None: return pHead2 else: p1=pHead1 p2=pHead2 if p1.val<p2.val: newHead=p1 p1=p1.next else: newHead=p2 p2=p2.next p=newHead while p1!=None and p2!=None: if p1.val<p2.val: p.next=p1 p=p.next p1=p1.next else: p.next=p2 p=p.next p2=p2.next if p1!=None: while p1!=None: p.next=p1 p1=p1.next p=p.next if p2!=None: while p2!=None: p.next=p2 p2=p2.next p=p.next return newHead !