Python链表排序相关问题解法示例

 更新时间:2024年01月15日 09:52:04   作者:算法与编程之美  
这篇文章主要为大家介绍了Python链表排序相关问题解法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

问题

链表实现选择排列中经常会遇到一些问题,那么该如何解决它们呢?

方法

这一类问题的基本都是根据题目给定的条件,对链表进行各种组合,如:基于归并排序思想,根据节点的数值,合并两个链表(合并两个排序的链表、合并k个已排序的链表)根据节点的位置,对链表重新排序(链表的奇偶重排)对两个链表节点的数值相加(链表相加(二))

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。

整体思路,如题目,链表的顺序与加法的顺序是相反的,自然的想到两种思路:把链表的元素压入栈中,借助栈实现对反转链表的元素进行操作;直接反转链表由于两种方式都需要新建链表,存储两个整数的相加值,因此空间复杂度都是o(n)。方法1比2多一个栈的空间,但是总的空间复杂度也是o(n)。细节提示加法的10进制的进位。设置进位标志incre,每次循环判断 val1 = list1.pop(-1)+list2.pop(-1)+incre。并且,在循环结束后,需要判断incre是否>0,如果>0,需要在链表中增加

代码清单

class ListNode:
   def __init__(self, x):
       self.val = x
       self.next = None
class Solution:
   def addInList(self , head1 , head2 ):
       # write code here
       list1 = []
       while head1:
           list1.append(head1.val)
           head1 = head1.next
       list2 = []
       while head2:
           list2.append(head2.val)
           head2 = head2.next
       list3 = []
       incre = 0
       while len(list1) and len(list2):
           val1 = list1.pop(-1)+list2.pop(-1)+incre
           incre = val1/10
           val1 = val1%10
           list3.append(val1)
       while len(list1):
           val1 = list1.pop(-1)+incre
           incre = val1/10
           val1 = val1%10
           list3.append(val1)
       while len(list2):
           val1 = list2.pop(-1)+incre
           incre = val1/10
           val1 = val1%10
           list3.append(val1)
       if incre>0:
           list3.append(incre)
       dumpyNode = ListNode(-1)
       pHead = dumpyNode
       while len(list3):
           pHead.next = ListNode(list3.pop(-1))
           pHead = pHead.next
       return dumpyNode.next
   def addInList2(self , head1 , head2 ):
       cur1 = head1
       pre = None
       while cur1:
           next1 = cur1.next
           cur1.next = pre
           pre = cur1
           cur1 = next1
       head1 = pre
       cur2 = head2
       pre2 = None
       while cur2:
           next2 = cur2.next
           cur2.next = pre2
           pre2 = cur2
           cur2 = next2
       head2 = pre2
       dumpyNode3 = ListNode(-1)
       pHead = dumpyNode3
       incre = 0
       while head1 and head2:  
           val = head1.val+head2.val+incre
           incre = val/10
           val = val%10
           head = ListNode(val)
           pHead.next = head
           pHead = pHead.next
           head1 = head1.next
           head2 = head2.next
       while head1:
           val = head1.val+incre
           incre = val/10
           val = val%10
           head = ListNode(val)
           pHead.next = head
           pHead = pHead.next
           head1 = head1.next
       while head2:
           val = head2.val+incre
           incre = val/10
           val = val%10
           head = ListNode(val)
           pHead.next = head
           pHead = pHead.next
           head2 = head2.next
       if incre>0:
           head = ListNode(incre)
           pHead.next = head
           pHead = pHead.next
       pHead = dumpyNode3.next
       cur1 = pHead
       pre = None
       while cur1:
           next1 = cur1.next
           cur1.next = pre
           pre = cur1
           cur1 = next1
       return pre

结语

针对数组排序问题,提出的解决方法,证明该方法是有效的。其实上面的题目的思路都很简单,相当于把简单的排序从数组迁移到了链表中。个人认为技巧在于链表节点的生成与穿针引线,一般可以使用两个辅助节点,定义虚拟节点和游走节点,虚拟节点负责返回整个链表,游走节点负责穿针引线。以提高算法效率。

以上就是Python链表排序相关问题解法示例的详细内容,更多关于Python链表排序问题的资料请关注脚本之家其它相关文章!

相关文章

  • Python使用Matplotlib实现雨点图动画效果的方法

    Python使用Matplotlib实现雨点图动画效果的方法

    这篇文章主要介绍了Python使用Matplotlib实现雨点图动画效果的方法,结合实例形式分析了win10安装ffmpeg及animation函数的使用相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Pytorch中torch.cat()函数的使用及说明

    Pytorch中torch.cat()函数的使用及说明

    这篇文章主要介绍了Pytorch中torch.cat()函数的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python属于解释语言吗

    python属于解释语言吗

    在本篇文章里小编给大家分享了关于python关于是否为解释语言的知识点,有兴趣的朋友们可以学习下。
    2020-06-06
  • python golang中grpc 使用示例代码详解

    python golang中grpc 使用示例代码详解

    这篇文章主要介绍了python golang中grpc 使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 用python绘制极坐标雷达图

    用python绘制极坐标雷达图

    大家好,本篇文章主要讲的是用python绘制极坐标雷达图,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Python面向对象实现方法总结

    Python面向对象实现方法总结

    这篇文章主要介绍了Python面向对象实现方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 使用mypy对python程序进行静态检查

    使用mypy对python程序进行静态检查

    大家好,本篇文章主要讲的是使用mypy对python程序进行静态检查,感兴趣的同学快来看一看吧,对你有帮助的话记得收藏一下哦
    2021-11-11
  • 盘点Python加密解密模块hashlib的7种加密算法(推荐)

    盘点Python加密解密模块hashlib的7种加密算法(推荐)

    这篇文章主要介绍了盘点Python加密解密模块hashlib的7种加密算法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Python操作使用MySQL数据库的实例代码

    Python操作使用MySQL数据库的实例代码

    本篇文章主要介绍了Python 操作 MySQL的实例代码,详细介绍了Python如何连接数据库和对数据的增删查改,有兴趣的可以了解一下
    2017-05-05
  • pd.DataFrame统计各列数值多少的实例

    pd.DataFrame统计各列数值多少的实例

    今天小编就为大家分享一篇pd.DataFrame统计各列数值多少的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论