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)
相关推荐
Csvn8 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
Wenweno0o8 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
小O的算法实验室8 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
‎ദ്ദിᵔ.˛.ᵔ₎8 小时前
LIST 的相关知识
数据结构·list
chenjingming6668 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
财迅通Ai8 小时前
6000万吨产能承压 卫星化学迎来战略窗口期
大数据·人工智能·物联网·卫星化学
cch89188 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳8 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
M--Y8 小时前
Redis常用数据类型
数据结构·数据库·redis
十五年专注C++开发8 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射