python链表_递归求和_递归求最大小值

创建一个单链表:

python 复制代码
class LinkNode:             #设置属性
    def __init__(self,data = None):
        self.data = data
        self.next = None
class LinkList:             #设置头结点
    def __init__(self):
        self.head = LinkNode()
        self.head.next = None

    def CreateListR(self,a):            #尾插法
        t = self.head
        for i in range(len(a)):
            s = LinkNode(a[i])          #建立节点
            t.next = s
            t = s
        t.next = None                   #让尾结点变为空值
a = LinkList()
a.CreateListR([3,2,6,7,1])          #创建另一个单链表
b = LinkList()                  #
b.CreateListR([3,2,1])          #创建一个单链表

创建一个双链表:

python 复制代码
class DlinkNode:
    def __init__(self,data = None):
        self.data = data
        self.next = None
        self.prior = None
class Dlinklist:
    def __init__(self):
        self.dhead = DlinkNode()
        self.dhead.next = None
        self.dhead.prior = None

    def CreatelistR(self,a):              #尾插法
       t = self.dhead
       for i in range(len(a)):
          s = DlinkNode(a[i])
          t.next = s
          s.prior = t
          t = s
       t.next = None
    def getsize(self):                  #返回链表长度
        p = self.dhead
        cnt = 0
        while p.next != None:
            cnt+=1
            p = p.next
        return cnt
    def geti(self,i):                   #返回序号为i的元素
        p = self.dhead
        j = -1
        while j<i and p.next!=None:
            j+=1
            p = p.next
        return p
a = Dlinklist()
a.CreatelistR([1,2,3,4,5,6,9])

两个单链表递归求和:

python 复制代码
def Sum(m):               #两个单链表求和
    if m==None:      #如果两个单链表尾节点的下一节点为空就返回0
        return 0
    else:
        return m.data+Sum(m.next)
p = Sum(a.head.next)
m = Sum(b.head.next)
print(p+m)

双链表用递归从中间求和:

python 复制代码
def Sum(p,x):                     #双链表用递归从中间求和
    if p==None or x ==None:
        return 0
    else:
        return p.data+Sum(p.next,x.prior)+x.data    #p指针向后移动,x指针向前移动
size = a.getsize()              #获取整体长度

if size%2==0:
    minddle = size//2               #找到中间序号
    it = a.geti(minddle)            #找到中间节点
    o = Sum(it,it.prior)            #注意传后面的it是要向前移一个
    print(o)
if size%2==1:
    minddle = size//2
    it = a.geti(minddle)
    o = Sum(it.next,it.prior)+it.data
    print(o)

用递归求链表的最小值:

python 复制代码
def Min(p):                 #用递归求链表的最小值
    if p.next==None:        #只有一个就直接返回
        return p.data
    min = Min(p.next)       #设为初始最小值
    if min<p.data:
        return min          #p向下移动
    else:
        return p.data       #返回最小值
a = Min(a.head.next)
print(a)
相关推荐
Dillon Dong1 小时前
【风电控制】TI TMS320F28379D 双CPU架构解析与任务分布设计
嵌入式硬件·算法·变流器·风电控制
花酒锄作田4 小时前
[python]argparse 包在聊天机器人中的应用
python
NiceCloud喜云6 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉6 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
3DVisionary7 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_7 小时前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程
AI玫瑰助手7 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
好评笔记7 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466857 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
油炸自行车7 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400