首页 > 编程语言 >代码随想录算法训练营day3|● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表

代码随想录算法训练营day3|● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表

时间:2024-10-04 21:00:48浏览次数:5  
标签:head cur val self 随想录 next 链表 移除

学习资料:https://programmercarl.com/链表理论基础.html#链表的类型
可设置虚拟头结点 dummy_head
链表最后指向Null
一个节点包含值和索引

学习记录:
203.移除链表元素(基本ListNode(),cur.next, cur.next.val)

点击查看代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        dummy_head = ListNode(next=head)
        cur = dummy_head
        while cur.next:
            if cur.next.val == val:
                cur.next = cur.next.next
            else:
                cur = cur.next
        return dummy_head.next
        

707.设计链表(找到索引对应值;在第一个元素前插入一个节点;在最后一个元素后面插入一个节点;在索引处插入一个节点;注意链表size变化)

点击查看代码
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class MyLinkedList:
    def __init__(self):
        self.dummpy_head = ListNode()
        self.size = 0

    def get(self, index: int) -> int:
        if index < 0 or index >= self.size:
            return -1

        cur = self.dummpy_head.next
        for i in range(index):
            cur = cur.next
        return cur.val


    def addAtHead(self, val: int) -> None:
        self.dummpy_head.next = ListNode(val, self.dummpy_head.next)
        self.size += 1


    def addAtTail(self, val: int) -> None:
        cur = self.dummpy_head
        while cur.next:
            cur = cur.next
        cur.next = ListNode(val)
        self.size += 1


    def addAtIndex(self, index: int, val: int) -> None:
        if index < 0 or index > self.size:
            return
        cur = self.dummpy_head
        for i in range(index):
            cur = cur.next
        cur.next = ListNode(val, cur.next)
        self.size += 1

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



# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

206.翻转链表(双指针法)

点击查看代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = head
        pre = None
        while cur:
            temp = cur.next
            cur.next = pre   # 翻转
            pre = cur
            cur = temp
        return pre

PS:
第一次接触链表,很懵,感觉707题还要反复刷,另外可以用极端条件或画图来更直观判断操作或赋值怎么写
多云转晴,放假期间很难坚持学习啊,幸好有美食支撑(柴火鸡、煲仔饭、泡鸡爪)

标签:head,cur,val,self,随想录,next,链表,移除
From: https://www.cnblogs.com/tristan241001/p/18447268

相关文章

  • [leetcode 25]. K 个一组翻转链表
    题目描述:https://leetcode.cn/problems/reverse-nodes-in-k-group给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯......
  • 代码随想录算法训练营 | 134. 加油站,135. 分发糖果,860.柠檬水找零,406.根据身高重建队
    134.加油站题目链接:134.加油站文档讲解︰代码随想录(programmercarl.com)视频讲解︰加油站日期:2024-10-04想法:1.总汽油大于等于消耗一定能跑完,2.当前剩余汽油小于0了,只能从下一站开始重新计算Java代码如下:classSolution{publicintcanCompleteCircuit(int[]gas,int......
  • [leetcode 92] 反转链表 II
    题目描述:https://leetcode.cn/problems/reverse-linked-list-ii给你单链表的头指针 head 和两个整数 left 和 right ,其中 left<=right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例1:输入:head=[1,2,3,4,5],left=2,right......
  • 代码随想录算法训练营Day2|209.长度最小的子数组 59.螺旋矩阵
    学习资料:https://programmercarl.com/数组总结篇.html#数组的经典题目移动窗格,首尾指针根据条件变化模拟行为,循环不变量(左闭右闭或左闭右开)整个过程保持一致学习记录:209.长度最小的子数组(用while使得尾指针遍历全部;用while实现,当[首:尾]之和>目标值,才移动首指针;为了求最小长度......
  • 代码随想录算法训练营 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次
    122.买卖股票的最佳时机II题目链接:122.买卖股票的最佳时机II文档讲解︰代码随想录(programmercarl.com)视频讲解︰买卖股票的最佳时机II日期:2024-10-03想法:本来还在想什么时候买股票,结果只需要考虑每天的正收益累加就是最大的收益了。Java代码如下:classSolution{public......
  • 代码随想录算法训练营day7|704.二分查找、27.移除元素、977.有序数组的平方
    学习资料:https://programmercarl.com/数组理论基础.html理解:双指针可以同时获取一个数组的两个位置的值二分查找:根据区间范围(左闭右闭、左闭右开)来判断左右指针比较方式刷题记录:704.二分查找(左闭右闭则<=,左右指针,middle=left+(right-left)//2,因为考虑了等号情况所以下一步l......
  • 代码随想录算法训练营 | 贪心算法:455.分发饼干,376. 摆动序列,53. 最大子序和
    455.分发饼干题目链接:455.分发饼干文档讲解︰代码随想录(programmercarl.com)视频讲解︰分发饼干日期:2024-10-02想法:大饼干喂大孩子Java代码如下:classSolution{publicintfindContentChildren(int[]g,int[]s){Arrays.sort(g);Arrays.sort(s);......
  • 代码随想录算法训练营 | 491.递增子序列,46.全排列,47.全排列 II
    491.递增子序列题目链接:491.递增子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰491.递增子序列日期:2024-10-02想法:根据题目nums[i]的范围在-100到100,可以用数组做记录是否同一层使用过Java代码如下:classSolution{List<Integer>path=newArrayList<>();......
  • 代码随想录算法-回溯4
    题目1491.非递减子序列给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以按任意顺序返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例1:输入:nums=[4,6,7,7]输出:[[4,6],[4......
  • 代码随想录算法训练营第六天|242.有效的字母异位词 ● 349. 两个数组的交集 ● 202.
    ​学习链接:https://programmercarl.com/哈希表理论基础.html学习笔记:遇到“要判断一个值是否在集合中出现过”的问题时,可以考虑hash表。hash表的形式包括数组、set、dict。当数的位数比较统一、或比较小,可用数组,快;当数的位数可变,可用set;当要同时考虑数的下标和值,可以用dict。......