当前位置: 首页 > article >正文

leetcode 面试题 02.04. 分割链表

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

测试示例如下:
在这里插入图片描述

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

思路:没有在原链表上进行修改,而是新建一个链表ans,用指针p1指向链表ans的头节点。然后遍历输入的链表head,如果head中某个节点值val小于x,那么将这个节点连接在p1指针后面(并修改p指针的指向);否则,这里分为两种情况,初始化指针p2,如果p2为NULL,那么直接把当前节点连接在p1指针后面,并将p2指向当前新连入的节点;否则把当前节点连接在p2指针后面,并修改p2指针的指向。最后这个遍历完成之后,返回ans的下一个节点即可。

把上述示例用我自己的思路描述如下:

在这里插入图片描述
参考代码如下(Python):

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None
        
class Solution(object):
    def partition(self, head, x):
        """
        :type head: ListNode
        :type x: int
        :rtype: ListNode
        """

        if not head or not head.next:
            return head

        p = head
        ans = ListNode(0)
        p1 = ans
        p2 = None
        while p:
            next = p.next
            p.next = None
            if p.val < x:
                p1_next = p1.next
                p1.next = p
                p1 = p1.next
                p1.next = p1_next
            else:
                if not p2:
                    p1.next = p
                    p2 = p1.next
                else:
                    p2.next = p
                    p2 = p2.next

            p = next

        return ans.next

运行结果:
请添加图片描述


http://www.kler.cn/news/17017.html

相关文章:

  • YonLinker连接集成平台构建新一代产业互联根基
  • babysql
  • JavaWeb学习------Servlet
  • Java基本数据类型以及包装类型的常量池技术
  • Java中线程池的介绍、构造方法及优势
  • 电子工程师是怎么练成的
  • 数据结构与算法之链表: Leetcode 141. 环形链表 (Typescript版)
  • 谷粒商城二十四Sentinel限流熔断降级
  • 用于scATAC-seq有监督分类的Cellcano
  • 【LeetCode刷题记录】数组专题
  • Python小姿势 - Python面向对象
  • 《基于深度学习模型的非接触式面部视频记录技术用于心房颤动的检测》阅读笔记
  • 「Codeforces」B. Avoid Local Maximums
  • Redis之五大基本的数据类型:字符串String 散列hashes 列表 lists 集合sets 有序集合sorted sets 基础命令讲解
  • 学生台灯什么牌子好对眼睛好?专业护眼灯的学生台灯分享
  • 【AI工具】bing chat 使用--三种模式+撰写功能
  • gradle Task 详解
  • 什么是Filter?
  • 工具及方法 - 安装播放器pot player
  • 大二一个学期学这么点内容,没有概念,只有实操
  • TCP的三次握手和四次挥手
  • 冲浪杂记——
  • Apollo 7.0——percception:rader源码剖析
  • win11本地安全机构保护已关闭怎么办?如何修复windows11本地安全机构保护已关闭?
  • ubuntu: ubuntu22.04安装redis数据库,并设置开机自启动
  • Redis底层设计与源码分析(一)__底层数据结构逻辑分析
  • 低代码,一招制敌,解决职场人的的办公难题
  • 【热门框架】Maven中聚合,继承指的是什么?有什么作用?
  • 刚转岗做项目经理,无从下手,怎么办?
  • 【硬件】嵌入式电子设计基础之分析电路