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)
相关推荐
清平乐的技术专栏1 小时前
【Flink学习】(四)Flink 常用转换算子,数据流数据处理
大数据·flink
Dlrb12119 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
kkeeper~9 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
Tisfy9 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
一直不明飞行9 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
IronMurphy9 小时前
【算法四十七】152. 乘积最大子数组
算法
2301_803934619 小时前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
WL_Aurora9 小时前
Python爬虫实战(六):新发地蔬菜价格数据采集.
爬虫·python
盲敲代码的阿豪9 小时前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
basketball61610 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++