首页 > 其他分享 >9.14日

9.14日

时间:2023-09-14 23:24:02浏览次数:41  
标签:index val pred 9.14 textit self size

  今天我学到了单链表和双链表的顺序表示,基本操作的实现,还了解了循环链表和双向循环链表。早上的重点是用例是UML统一建模语言的核心,接着是乒乓球横版的握持方法及上旋球发力动作要领及其训练。下午还有离散数学中序偶与笛卡尔积,集合关系及其表示。总之今天是充实的一天,也是非常耗费经历的一天。

实现单向链表,即每个节点仅存储本身的值和后继节点。除此之外,我们还需要一个哨兵(sentinel)节点作为头节点,和一个 size\textit{size}size 参数保存有效节点数。如下图所示。

初始化时,只需创建头节点 head\textit{head}head 和 size\textit{size}size 即可。

实现 get(index)\textit{get}(\textit{index})get(index) 时,先判断有效性,再通过循环来找到对应的节点的值。如下图所示。

实现 addAtIndex(index, val)\textit{addAtIndex}(\textit{index, val})addAtIndex(index, val) 时,如果 index\textit{index}index 是有效值,则需要找到原来下标为 index\textit{index}index 的节点的前驱节点 pred\textit{pred}pred,并创建新节点 to_add\textit{to\_add}to_add,将to_add\textit{to\_add}to_add 的后继节点设为 pred\textit{pred}pred 的后继节点,将 pred\textit{pred}pred 的后继节点更新为 to_add\textit{to\_add}to_add,这样就将 to_add\textit{to\_add}to_add 插入到了链表中。最后需要更新 size\textit{size}size。这样的操作对于 index=0\textit{index} = 0index=0 也成立,如以下两张图所示。

实现 addAtHead(val)\textit{addAtHead}(\textit{val})addAtHead(val) 和 addAtTail(val)\textit{addAtTail}(\textit{val})addAtTail(val) 时,可以借助 addAtIndex(index, val)\textit{addAtIndex}(\textit{index, val})addAtIndex(index, val) 来实现。

实现 deleteAtIndex(index)\textit{deleteAtIndex}(\textit{index})deleteAtIndex(index),先判断参数有效性。然后找到下标为 index\textit{index}index 的节点的前驱节点 pred\textit{pred}pred,通过将 pred\textit{pred}pred 的后继节点更新为 pred\textit{pred}pred 的后继节点的后继节点,来达到删除节点的效果。同时也要更新 size\textit{size}size。

class ListNode:

    def __init__(self, val):
        self.val = val
        self.next = None


class MyLinkedList:

    def __init__(self):
        self.size = 0
        self.head = ListNode(0)


    def get(self, index: int) -> int:
        if index < 0 or index >= self.size:
            return -1
        cur = self.head
        for _ in range(index + 1):
            cur = cur.next
        return cur.val


    def addAtHead(self, val: int) -> None:
        self.addAtIndex(0, val)


    def addAtTail(self, val: int) -> None:
        self.addAtIndex(self.size, val)


    def addAtIndex(self, index: int, val: int) -> None:
        if index > self.size:
            return
        index = max(0, index)
        self.size += 1
        pred = self.head
        for _ in range(index):
            pred = pred.next
        to_add = ListNode(val)
        to_add.next = pred.next
        pred.next = to_add

    def deleteAtIndex(self, index: int) -> None:
        if index < 0 or index >= self.size:
            return
        self.size -= 1
        pred = self.head
        for _ in range(index):
            pred = pred.next
        pred.next = pred.next.next

 

标签:index,val,pred,9.14,textit,self,size
From: https://www.cnblogs.com/binglinll/p/17703793.html

相关文章

  • 2023.9.14 整数二分排序
    1#二分23##整数二分45~~~c++6//区间[l,r]被划分成[l,mid]和[mid+1,r]时使用7inttest01(intl,intr)8{9while(l<r)10{11intmid=(l+r)/2;12boolcheck(intmid);//check判断mid是否满足x性质13if(check(......
  • 9.14
    今天学习原码反码补码原码反码补码是计算机存储一个具体数字的编码方式。java虚拟机中整数有byte、short、int、long四种分别表示8位、16位、32位、64位有符号整数。整数用补码表示第一位表示符号位,其余位表示值正数的反码跟原码相等反码是原码在符号位不变的基础上,其余各位......
  • 2023.9.14
    数据结构今天学习了单链表的创建,首先学习了单链表的头插法,学习到单链表的创建是一个动态结构,整个可用储存空间可以为多个链表共同享用,每个i链表占用的空间不需要提前分配划定,而是由系统按时生成,因此,建立线性表的链式存储结构的过程就是一个动态生成链表的过程。前插法就是通过将新......
  • 每日总结|9.14-一个人也要活得像一支队伍
    今天上课,我想了想觉得单纯的复刻说明每天做了什么并不能体现出自己的收获,我应该再细化,或者是因为我还是没有太多的收获,所以细化不下来,我应该更踏实一些。今天我做了件事1、课上收获2、hadoop,复习简单的增删改查。3、其他===================================== 1、UML的学......
  • 大二快乐日记9.14
    今天还是一样快乐。数据结构把链表的印象加深。离散数学一堆证明过程不过大同小异。百度了很多eclipase的编程和设置。因为有时候调用一些系统类不行。并且学了一些实现方法。晚上写了会动手动脑并且起了一个很长的标题。最后在泰坦陨落和好兄弟们联机。谁不想穿一套机甲呢?......
  • 9.14 周四总结
    今天学会巩固了数据结构课程讲的链表操作部分的内容。以下是力扣707设计链表一题的内容你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果是双向链表,则还需......
  • 9.14日记
    使用maven创建Javaweb项目运行成功14-Sep-202321:05:05.054信息[main]org.apache.catalina.core.StandardService.startInternal正在启动服务[Catalina]14-Sep-202321:05:05.054信息[main]org.apache.catalina.core.StandardEngine.startInternal正在启动Servlet引擎......
  • 大二打卡(9.14)
    今天做了什么:上午聚精会神的听了刘立嘉老师的课,感觉这节课终于进入重点内容了,但是感觉上了两次课还是感觉只是开了个头,体育课,本来以为排球捡球没那么累,排球没那么难,结果一个小时之后,让我腿和腰都酸了,一口气喝了半升的水过了不到二十分钟就又渴了,暑假到现在第二次感受到了汗流满面......
  • 9.14
    消除double类型计算出现精度损失的方法packageBigDecimalTest;importjava.math.BigDecimal;publicclassTestBigDecimal{publicstaticvoidmain(String[]args){BigDecimalf1=newBigDecimal("0.05");BigDecimalf2=BigDecimal.valu......
  • 9.14闲话
    我草我今天真几把难受。感冒了。一天已经喝了三包板蓝根了现在一点好转的迹象都没有......