首页 > 其他分享 >143. 重排链表(中)

143. 重排链表(中)

时间:2024-01-28 15:00:36浏览次数:34  
标签:p2 head p1 curr 143 next 链表 重排

目录

题目

  • 给定一个单链表 L 的头节点 head ,单链表 L 表示为:
    L0 → L1 → … → Ln - 1 → Ln
    请将其重新排列后变为:

    L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
    不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

题解:双指针+翻转链表

  • 用快慢指针找到链表的中点,逆转后半截链表,此时一个指针在头,一个指针在链表中间(逆转完的第一个)交替合并两个链表即可
class Solution:
    def reorderList(self, head: Optional[ListNode]) -> None:
        """
        Do not return anything, modify head in-place instead.
        """
        if not head or not head.next:
            return
        # 用快慢指针找到链表的中点
        slow = head
        fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        # 翻转后半截链表
        prev = None
        curr = slow
        while curr:
            next_node = curr.next
            curr.next = prev#改变链表方向
            prev = curr#更新 prev
            curr = next_node#更新 curr
        # 合并前半截和翻转后的后半截链表
        p1 = head#p1在表头
        p2 = prev#p2在表中
        while p2.next:
            next_p1 = p1.next#存储p1下一个节点
            next_p2 = p2.next
            p1.next = p2#连接
            p2.next = next_p1
            p1 = next_p1#更新p1
            p2 = next_p2#更新p2
        return

标签:p2,head,p1,curr,143,next,链表,重排
From: https://www.cnblogs.com/lushuang55/p/17992852

相关文章

  • 142. 环形链表 II(中)
    目录题目题解:双指针题目给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题目链接:24.两两交换链表中的节点-力扣(LeetCode)建议画图,会更清晰一些。同时注意交换问题要用两个临时节点。class......
  • CF1433E Two Round Dances 题解
    题目传送门前置知识圆排列解法\(\dfrac{Q_{n}^{\frac{n}{2}}Q_{\frac{n}{2}}^{\frac{n}{2}}}{A_{2}^{2}}\)即为所求。同时因为\(n\le20\)和没有模数,所以不需要处理逆元,暴力算即可。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineu......
  • 82. 删除排序链表中的重复元素 II(中)
    目录题目题解:双指针题目给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。题解:双指针题目给的头节点是第一个元素,处理起来较麻烦(需单独处理头节点);加上习惯用一个空的头节点,所以本题新建了一个虚拟头节点,以便统一......
  • 链表算法
    目录链表算法初始化节点1.删除链表的第N个节点2.删除链表中倒数第N个节点3.分块反转链表(K个一组翻转链表)4.反转链表I5.反转链表II(给定区间反转)6.判断是否为环形链表7.两数相加(两个链表相同位置相加)8.合并两个有序链表9.删除排序链表中的重复元素II10.旋转链表(将链表每个节......
  • 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表 ,206.反转链表
    203.移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。题目链接:203.移除链表元素-力扣(LeetCode)注意c++中NULL和nullptr的区别。应该用nullptr来表示空指针。/***Definitionforsingly......
  • leecode链表
    LCR_207题  回文链表给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。1classSolution{2publicbooleanisPalindrome(ListNodehead){3ListNodep=head;4......
  • 用于汽车类有刷直流电机、电磁阀,DRV8316CTQRGFRQ1、DRV8143SQRXYRQ1、DRV8242SQRHLRQ1
    1、DRV8316CTQRGFRQ1 具有集成电流检测功能、峰值电流为8A的汽车级三相电机驱动器电机类型-步进:多相电机类型-AC,DC:无刷DC(BLDC)功能:驱动器-全集成,控制和功率级输出配置:半桥(3)接口:PWM技术:NMOS步进分辨率:应用:-电流-输出:8A电压-供电:4.5V~35V电压-负载:4.5V~35V工作......
  • 线性表 - 数组与链表
    感谢@pdai的全栈知识体系,数据结构与算法是相通的,做的题目与原博主不同。https://www.pdai.tech/md/algorithm/alg-basic-array.html数组数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。数组的优点:存......
  • STL-list链表
    STL-list链表目录STL-list链表初始化创建添加删除元素遍历迭代参考函数参考资料STL-list容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。list容器中各个元素的......