python使用栈遇到的坑

两个链表生成相加链表

http://www.nowcoder.com/questionTerminal/c56f6c70fb3f4849bc56e33ff2a50b6b

本人习惯使用python,思路和一些C++写的代码思路一致,先使用stack1和stack2存储链表中的元素,然后从出栈累加构建新的链表,但是问题来了,C++写的代码可以通过但是使用python写的代码就超时无法通过,觉得题目测试存在问题,对python写的代码的时间复杂度应该相对放低些。
以下是运行超时的python代码:
class Solution:
    def addInList(self , head1 , head2 ):
        # write code here
        head = ListNode(0)
        stack1=[]
        stack2=[]
        while head1:
            stack1.append(head1)
            head1=head1.next
        while head2:
            stack2.append(head2)
            head2=head2.next
        if len(stack1)<len(stack2):
            stack1, stack2 =  stack2, stack1
        carry=0
        while stack1&nbs***bsp;stack2&nbs***bsp;carry:
            if stack1:
                tmp = stack1.pop()
                carry+=tmp.val 
            if stack2>0:
                carry+=stack2.pop().val  
            tmp=ListNode(carry%10)
            carry=int(carry/10)
            tmp.next=head.next
            head.next=tmp
        return head.next
重新审阅了这段代码发现生成累加和的链表的节点是不需要每次重新生成的,可以利用head1和head2中较长的那个链表,stack1保留较长的那个链表(注意数组中其实保留了链表的结构),tmp始终指向链表的头节点,最后判断carry是否为0,如果不为0,那么需要生成一个新的节点保留carry,然后将新节点的下个节点指向tmp。
class Solution:
    def addInList(self , head1 , head2 ):
        # write code here
        head = ListNode(0)
        stack1=[]
        stack2=[]
        while head1:
            stack1.append(head1)
            head1=head1.next
        while head2:
            stack2.append(head2)
            head2=head2.next
        if len(stack1)<len(stack2):
            stack1, stack2 =  stack2, stack1
        carry=0
        tmp=None
        while stack1&nbs***bsp;stack2:
            if stack1:
                tmp = stack1.pop()
                carry+=tmp.val 
            if stack2:
                carry+=stack2.pop().val  
            tmp.val=carry%10
            carry=int(carry/10)
        if carry:
            head=ListNode(carry)
            head.next=tmp
            return head
        else:
            return tmp



全部评论

相关推荐

我看标题以为40W,我觉得最差也得40k,点进去一看40块。你永远想不到客户的预算有多低...&nbsp;要求&ldquo;前端使用vue+element开发一个pc端宠物网站和vue+vant开发一个移动端网站,类型是宠物网站的。客户预算40&rdquo;&nbsp;全网最受欢迎的嵌入式面经面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3000+订阅还会涨价,提前订阅提前享受,持续更新中。原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoMc
野猪不是猪🐗:哎呀,看来这位客户预算确实挺让人意外的呢!不过,别灰心,有时候客户的预算有限,但项目完成后说不定能带来意想不到的收获呢!😊 至于你提到的嵌入式面经,听起来好像很棒的样子!如果你对求职有帮助,那确实值得订阅学习哦!悄悄告诉你,点击我的头像,我们可以私信聊聊更多求职经验和技巧哦~🎉 对了,你对Vue和Element/Vant的开发有什么疑问或者想要分享的经验吗?我们可以一起探讨一下~😉
点赞 评论 收藏
分享
kaoyu:腾讯基本都没hc了,只有零星捞人的
点赞 评论 收藏
分享
03-09 20:32
技术支持工程师
牛客972656413号:成绩管理系统会不会有点太。。。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务