IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leetcode刷题#day4 -> 正文阅读

[数据结构与算法]leetcode刷题#day4

Python 中链表例题leetcode

在这里插入图片描述
首先分析python的链表是如何工作的,由于python本身是不带链表的,一般是由笔者自己定义一个class,然后令其实例化。具体看如下例子:

class ListNode():
    def __init__(self, val):
        if isinstance(val,int):
            self.val = val
            self.next = None
            
        elif isinstance(val,list):
            self.val = val[0]
            self.next = None
            cur = self
            for i in val[1:]:
                cur.next = ListNode(i)
                cur = cur.next
    
    def gatherAttrs(self):
        return ", ".join("{}: {}".format(k, getattr(self, k)) for k in self.__dict__.keys())

    def __str__(self):
            return self.__class__.__name__+" {"+"{}".format(self.gatherAttrs())+"}"
     
l1 = [2,4,8]
l2 = [5,6,4]
l1 = ListNode(l1)
l2 = ListNode(l2)

如果给定两个list,则可以按照以上方式去定义一个链表,但是怎么去创建更改一个新的链表呢,这就需要考虑到python中对象实例化的一个规则。如下:

class human():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
a = human('jin',3)
b,c = a,a #需要注意 此时 a,b,c荣辱与共
b.age = 23
print(a.age,c.age)

#ans: 23 23

也就是说我们定义一个实例化对象时,后续的更改是直接影响最初的实例化对象的,那如果想得到一个新的实例化对象,可以重新定义一个或者使用python的copy方法:

class human():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
a = human('jin',3)
c = human('jin',3)
#c = copy.deepcopy(a)
b = a
b.age = 23
print(a.age,c.age)

#ans 23 3

那既然有了这个性质,我们的链表就能简单实现想要的功能了。
首先是如何指向下一个节点以及做相应的修改

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        res = ListNode(l1.val+l2.val)
        # 首先初始化一个链表的节点[这里其实就是实例化对象]
        temp = res
        # 分配一个暂时的变量方便做相应的修改
        while (l1 and l1.next != None) or (l2 and l2.next != None) or (temp.val > 9):
            if l1 is not None:
                l1 = l1.next
            if l2 is not None:
                l2 = l2.next
			sum_ = (l1.val if l1 else 0) + (l2.val if l2 else 0)
			#如果l1 l2当前节点有值则加 没有值则加0 注意不能与上面直接合并 l1 l2已经发生改变
            # sum_ 表示当前节点的结果
            temp.next = ListNode(temp.val//10 + sum_)
            # 根据我们定义的ListNode 给下一个节点赋值(说白了就是在节点后面再给他串一个节点 俗称迭代套娃)
            temp.val = temp.val%10
            # 更改本节点的值

            temp = temp.next
            # 把指针指向下一个节点 这样重复上述操作的话 就可以达到节点一个个往下串的效果
            
        return res

嗯 先捋到这吧

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:39:43  更:2022-03-03 16:44:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:23:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码