两数相加——leetcode002

leetcode002——两数相加(链表,python)

# -*- coding: utf-8 -*-
"""
Created on Wed May 22 09:25:47 2019

@author: Lenovo
"""

# Definition for singly-linked list.
class ListNode(object): #定义链表类
     def __init__(self, x):  #初始化时,需要提供第一个节点的值x
         self.val = x 
         self.next = None    #下一节点为None

class Solution(object):        #定义解决方案类(leetcode中的常用给定格式)  
    def addTwoNumbers(self, l1, l2):   #定义Solution中的方法(注:在类中定义方法,第一个参数通常为self,否则无法调用同类方法)
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        re = ListNode(0)  #创建链表头结点指针re,节点值=0
        r=re              #创建位置指针,用于给链表re赋值
        carry=0           #进位位
        while(l1 or l2):   #当l1或l2不为空
            x= l1.val if l1 else 0   #取链表中节点的值(为空则=0)
            y= l2.val if l2 else 0
            s=carry+x+y   #求和
            carry=s//10   #对10做整除,得到进位位的值
            r.next=ListNode(s%10)  #取余,赋值
            r=r.next            #(若指针非空)取链表下一个结点
            if(l1!=None):l1=l1.next  
            if(l2!=None):l2=l2.next
        if(carry>0):   #若最高位求和后,进位位=1
            r.next=ListNode(1)  #下一节点赋值,=1
        return re.next  #返回re.next
    
if __name__=='__main__':
    S=Solution();   #先创建Solution类对象S
    l1=ListNode(2);l1.next=ListNode(4);l1.next.next=ListNode(3);  #创建链表l1(此处可以创建一个list,然后使用for循环赋值)
    l2=ListNode(5);l2.next=ListNode(6);l2.next.next=ListNode(4);
    r=S.addTwoNumbers(l1,l2)   #调用方法
    
    print(r.val,r.next.val,r.next.next.val)   #输出(此处也可以使用for)

你可能感兴趣的:(算法练习,Python学习)