首页 > 编程语言 >代码随想录算法训练营day4|● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 142.环形链表I

代码随想录算法训练营day4|● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 142.环形链表I

时间:2024-10-05 21:01:28浏览次数:6  
标签:head slow cur 随想录 fast next 链表 节点

学习资料:https://programmercarl.com/0024.两两交换链表中的节点.html

学习记录:
24.两两交换链表中的节点(添加虚拟头节点;交换1、2节点和3、4节点时,要用1前面的cur,先保存1为temp且3保存为temp1,cur指向2,再把2指向temp,因为cur指向2后就与1没关联了)

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

19.删除链表的倒数第N个节点(用快慢指针,fast和slow都设置为虚拟头节点,fast先走N+1步,之后slow和fast同时走,当fast走到NULL,此时slow为倒数第N-1个节点;把slow的下一个节点删除即可)

点击查看代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        dummy_head=ListNode(next=head)
        slow=fast=dummy_head
        for i in range(n+1):
            fast=fast.next
        while fast:
            fast=fast.next
            slow=slow.next
        slow.next=slow.next.next
        return dummy_head.next
        

142.环形链表(链表中,若快(2)慢(1)指针能相遇,则为环形链表;从相遇地点到环形入口的距离和从头节点到环形入口的时间一样;相遇时,快指针走了x+y+n(y+z),慢指针走了x+y,则2(x+y)=x+y+n(y+z),其实不太理解??)
点击查看代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        fast=slow=head
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
            if fast == slow:
                index1 = fast
                index2 = head
                while index1 != index2:
                    index1 = index1.next
                    index2 = index2.next
                return index1
        return None

PS: ● 面试题 02.07. 链表相交 还没做,放一下
阴转雨,吃火锅,爽

标签:head,slow,cur,随想录,fast,next,链表,节点
From: https://www.cnblogs.com/tristan241001/p/18448463

相关文章

  • 代码随想录算法训练营 | 452. 用最少数量的箭引爆气球,435. 无重叠区间,763.划分字母区
    452.用最少数量的箭引爆气球题目链接:452.用最少数量的箭引爆气球文档讲解︰代码随想录(programmercarl.com)视频讲解︰452.用最少数量的箭引爆气球日期:2024-10-05想法:对气球起点排序,没有重叠的箭头+1,有重叠得话将右边置为最小的右边。Java代码如下:classSolution{publ......
  • 单Master节点的k8s集群部署-完整版
    K8S安装步骤一、准备工作1.准备三台主机(一台Master节点,两台Node节点)如下:角色IP内存核心磁盘Master192.168.116.1314G4个55GNode01192.168.116.1324G4个55GNode02192.168.116.1334G4个55G2.关闭SElinux,因为SElinux会影响K8S部分组件无法正常......
  • 代码随想录算法训练营day3|● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表
    学习资料:https://programmercarl.com/链表理论基础.html#链表的类型可设置虚拟头结点dummy_head链表最后指向Null一个节点包含值和索引学习记录:203.移除链表元素(基本ListNode(),cur.next,cur.next.val)点击查看代码#Definitionforsingly-linkedlist.#classListNod......
  • [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......
  • 基于无线传感器网络的节点分簇算法matlab仿真
    1.程序功能描述对传感器网络进行分簇,在分簇过程中考量的有节点能量状态、节点拓扑位置、孤立节点删除等条件。与LEACH算法比较,对比如下几个方面指标:1.网络从初始状态直到首个节点因能量耗尽而死亡的持续时间。2.显示了随着时间的变化,一些节点开始死亡,整个网络的可用率下......
  • 代码随想录算法训练营day7|704.二分查找、27.移除元素、977.有序数组的平方
    学习资料:https://programmercarl.com/数组理论基础.html理解:双指针可以同时获取一个数组的两个位置的值二分查找:根据区间范围(左闭右闭、左闭右开)来判断左右指针比较方式刷题记录:704.二分查找(左闭右闭则<=,左右指针,middle=left+(right-left)//2,因为考虑了等号情况所以下一步l......