两数相加Leecode及单链表

问题描述:

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
针对这个问题给出以下简答:
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
  
    
#在Python中一个变量就是一个指针
class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        #初始化一个链表
        pre_node = ListNode(0)
        #并用cur指向
        cur = pre_node
        flag = 0 #进位符
        #----遍历链表-------
        while l1 or l2:
            #对链表中的每一个值
            val1=val2=0
            if l1: #判断链表是否有元素
                val1 = l1.val #读取链表中的值
                l1 = l1.next #将当前节点放到下一个节点
            if l2:
                val2= l2.val
                l2 = l2.next
       
            sumnum = val1 + val2 + flag#add计算 
            flag = int(sumnum / 10)#为0则不需要进位为一的
            cur.next = ListNode(sumnum % 10)#增加一个节点
            cur = cur.next #cur 指向当前节点
        #表示最后一位是否有进位是
        if flag>0:
            cur.next = ListNode(flag)#有链表中最后进位的时候增加一个节点。
            
       
        return pre_node.next
                

单链表是常见一种数据结构,其中每一个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接

单链表的结构如下图所示:


在python没有专门的指针概念,在python中每一个变量都是指针

引用表示指向关系,只不过引用不能像指针一样进行运算

因此,要实现链表的操作,不能和C一样直接对指针进行操作

实现链表反转:

#Python链表实现
#定义一个单链表
class ListNode(object):
    def __init__(self):
        self.val = None
        self.next = None

#对链表进行操作
class ListNode_handle:
    def __init__(self):
        self.cur_node=None

    #增加新的节点操作
    def add(self,data):
        node =ListNode()
        node.val =data
        node.next=self.cur_node
        self.cur_node=node
        return node

    def print_listNode(self,node):
        while node:
            print('\nnode: ', node, ' value: ', node.val, ' next: ', node.next)

    #链表反转
    def _reverse(self,nodelist):
        list=[]
        #把链表当中的值全部放入列表中
        while nodelist:
            list.append(nodelist.val)
            nodelist= nodelist.next
        result=ListNode()#初始化链表对象
        result_handle = ListNode_handle()#初始化链表操作对象
        for i in list:#遍历列表中的数据
            result =result_handle.add(i)
        return result


猜你喜欢

转载自blog.csdn.net/wngjiayou/article/details/80052371