leetcode445. 兩數相加 II---頭插法
阿新 • • 發佈:2018-11-09
頭插法:
每次插入節點從頭節點插入
尾插法:
每次插入節點從尾節點插入
def addTwoNumbers(self, l1, l2): """ 注意 1.初始化的是頭節點,最後的結果要返回頭節點的next 2.節點的插入的時候注意順序,箭頭指向哪個哪個在等號的右邊 主要思想是頭插法構建連結串列 """ stack1,stack2,flag = [],[],0 head = ListNode(0) while l1: stack1.append(l1.val) l1 = l1.next while l2: stack2.append(l2.val) l2 = l2.next while stack1 and stack2: t = int(stack1.pop() + stack2.pop()+flag) ####頭插法插入連結串列 if t < 10: p = ListNode(t) p.next = head.next head.next = p flag = 0 ####儲存大於10的餘數 else: a = int(t%10) flag = int(t/10) p = ListNode(a) p.next = head.next head.next = p while stack1: t = int(stack1.pop()) + flag if t < 10: p = ListNode(t) p.next = head.next head.next = p flag = 0 else: a = int(t%10) p = ListNode(a) p.next = head.next head.next = p flag = int(t/10) while stack2: t = int(stack2.pop()) + flag if t < 10: p = ListNode(t) p.next = head.next head.next = p flag = 0 else: a = int(t%10) p = ListNode(a) p.next = head.next head.next = p flag = int(t/10) if flag != 0: p = ListNode(flag) p.next = head.next head.next = p return head.next
整理程式碼
def addTwoNumbers(self, l1, l2): """ """ stack1, stack2, flag = [], [], 0 head = ListNode(0) while l1: stack1.append(l1.val) l1 = l1.next while l2: stack2.append(l2.val) l2 = l2.next while stack1 and stack2: t = int(stack1.pop() + stack2.pop() + flag) flag = self.insert_head(t,head) while stack1: t = int(stack1.pop()) + flag flag = self.insert_head(t, head) while stack2: t = int(stack2.pop()) + flag flag = self.insert_head(t, head) if flag != 0: p = ListNode(flag) p.next = head.next head.next = p return head.next def insert_head(self,t,head): ####頭插法插入連結串列 if t < 10: p = ListNode(t) p.next = head.next head.next = p flag = 0 ####儲存大於10的餘數 else: a = int(t % 10) flag = int(t / 10) p = ListNode(a) p.next = head.next head.next = p return flag