首页 > 其他分享 >86. 分隔链表(中)

86. 分隔链表(中)

时间:2024-01-29 21:14:39浏览次数:19  
标签:分隔 big next 链表 tail sml 86 节点

目录

题目

  • 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
    你应当 保留 两个分区中每个节点的初始相对位置。

题解:链表拆分+拼接

  • 新建两个链表,一个链表放小于x的节点,一个链表放大于等于x的节点。最后,拼接这两个链表。
class Solution:
    def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
        sml_dummy = ListNode(0)  # 小于 x 的链表的虚拟头节点
        big_dummy = ListNode(0)  # 大于等于 x 的链表的虚拟头节点
        sml_tail = sml_dummy  # 用于追踪小于 x 的链表的尾部
        big_tail = big_dummy  # 用于追踪大于等于 x 的链表的尾部
        p = head
        while p:
            if p.val < x:
                sml_tail.next = p
                sml_tail = sml_tail.next#更新尾指针,便于下一个节点的加入
            else:
                big_tail.next = p
                big_tail = big_tail.next
            p = p.next
        big_tail.next = None  # 将大于等于 x 的链表的尾部指向 None,断开与后续节点的连接,没有这句,大于等于 x 的节点后面仍然连接着小于 x 的节点
        sml_tail.next = big_dummy.next  # 将小于 x 的链表的尾部连接到大于等于 x 的链表的头部
        return sml_dummy.next

标签:分隔,big,next,链表,tail,sml,86,节点
From: https://www.cnblogs.com/lushuang55/p/17995325

相关文章

  • 洛谷题解-[ABC286E] Souvenir
    https://www.luogu.com.cn/problem/AT_abc286_e题目描述NNN個の都市があり、いくつかの相異なる都市の間は一方通行の直行便によって移動することができます。どの直行便が存在するかはNNN個の長さNNNの文字列S1,S2,…,SNS_1,S_2,\ldots,S_NS1​,S2​,…,SN​......
  • 61. 旋转链表(中)
    目录题目法一、k次头插法法二、快慢指针题目给你一个链表的头节点head,旋转链表,将链表每个节点向右移动k个位置。法一、k次头插法把链表尾的元素取下来头插法放到链表头,k为几就循环几次classSolution:defrotateRight(self,head:Optional[ListNode],k:int)......
  • 160. 相交链表
    目录题目题解:双指针题目题解:双指针思路:计算两条链表的长度,找到长度差,让长的链表多走差的值,返回第一个相等的元素classSolution:defgetIntersectionNode(self,headA:ListNode,headB:ListNode)->Optional[ListNode]:count1,count2=0,0pa=head......
  • 牛客小白月赛86
    B水平考试======等价于两个集合\(S,T\)判断\(S\)中是否存在\(T\)中所不包含的元素。若存在则输出0;否则输出10。时间复杂度:\(O(T)\)C题:区间查询当前区间可以被分为多少段,要求每段只有一种数字。做法1:提前对所有段编号,查询时直接左右边界编号相减,注意边界需要特......
  • 148. 排序链表(中)
    目录题目法一、冒泡排序法二、归并排序题目给你链表的头结点head,请将其按升序排列并返回排序后的链表。法一、冒泡排序冒泡排序:两个for循环,i从头开始,j在i后一位开始,比较如果j小于i就交换,否则i往后移classSolution:defsortList(self,head:Optional[ListNo......
  • 【算法】004_链表
    哈希表哈希表增删改查是常数时间,但是这个常数时间比较大放入哈希表的东西,如果是基础类型,内部按值传递,内存占用就是这个东西的大小放入哈希表的东西,如果不是基础类型,内部按引用传递,内存占用就是这个东西的内存地址的大小有序表有序表的增删改查是O(logn)级别的放入有序表......
  • 8086汇编语言二重循环问题三种处理方法
    1.寄存器保留CXassumecs:code,ds:datadatasegmentdb'ibm'db'dec'db'dos'db'vax'dataendscodesegmentstart:movax,datamovds,a......
  • (4/60)两两交换链表结点、删除链表倒数第N个结点、链表相交、环形链表
    两两交换链表结点leetcode:24.两两交换链表中的节点迭代法思路第一步cur->next=cur->next->next第二步cur->next->next=原cur->next第三步cur->next->next->next=原cur->next->next->next注意用临时变量保存指针位置。复杂度分析时间复杂度:O(N)。空间复杂度:O(1)。......
  • ubuntu_x86_64上运行arm64的程序
    摘自:百度文心一言 qemu-user-static是一个用于利用当前操作系统来运行其它架构的一个仿真器要使Ubuntu上运行ARM64程序,需要进行以下操作:安装QEMU模拟器:可以通过命令sudoapt-getinstallqemu-user-static来安装。这将为系统提供支持多种体系结构的能力。获取适用于ARM64的二进制......
  • 链表操作
    代码随想录移除元素。不设置虚拟头节点,分类讨论。structListNode*removeElements(structListNode*head,intval){structListNode*temp;//当头结点存在并且头结点的值等于val时while(head&&head->val==val){temp=head;//将新的头结点设置为head->next并删......