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)
相关推荐
Tisfy几秒前
LeetCode 3453.分割正方形 I:二分查找
算法·leetcode·二分查找·题解·二分
漫随流水1 分钟前
leetcode算法(101.对称二叉树)
数据结构·算法·leetcode·二叉树
未定义.2215 分钟前
第1篇:0基础入门!Python+Selenium环境搭建与第一个自动化脚本
python·功能测试·selenium·自动化·jenkins·pytest
特行独立的猫5 分钟前
python+Proxifier+mitmproxy实现监听本地网路所有的http请求
开发语言·爬虫·python·http
深蓝电商API5 分钟前
Scrapy Spider 参数化:动态传入 start_urls 和自定义设置
爬虫·python·scrapy
浩瀚地学6 分钟前
【Java】集合-Collection
java·开发语言·经验分享·笔记·学习
CCPC不拿奖不改名7 分钟前
基于FastAPI的API开发(爬虫的工作原理):从设计到部署详解+面试习题
爬虫·python·网络协议·tcp/ip·http·postman·fastapi
源代码•宸9 分钟前
Golang原理剖析(string面试与分析、slice、slice面试与分析)
后端·算法·面试·golang·扩容·string·slice
派森先生10 分钟前
排序算法-冒泡排序
算法·排序算法
盛者无名11 分钟前
Rust语言基础
开发语言·后端·rust