问题描述:
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
输入:(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