分割链表leetcode86

简介: 分割链表leetcode86

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。


你应当保留两个分区中每个节点的初始相对位置。


示例:


输入: head = 1->4->3->2->5->2, x = 3

输出: 1->2->2->4->3->5

## 申请新空间做头结点方式


 

   class Solution {

   public:

       ListNode* partition(ListNode* head, int x) {

           ListNode*less_pre=new ListNode(8);

           ListNode*more_pre=new ListNode(8);

           ListNode *l=less_pre;

           ListNode*m=more_pre;

           while(head)

           {  

               if(head->val<x)

           {

               less_pre->next=head;

               less_pre=head;

           }

            else

            {  more_pre->next=head;

               more_pre=head;  

            }

               head=head->next;          

           }

           less_pre->next=m->next;

           more_pre->next=NULL;

           return l->next;

         

       }

   };

## 直接利用地址存储方式


   class Solution {

   public:

       ListNode* partition(ListNode* head, int x) {

           ListNode less_head(0);

           ListNode  more_head(0);

           ListNode*less_pre=&less_head;

           ListNode*more_pre=&more_head;

           while(head)

           {  

               if(head->val<x)

           {

               less_pre->next=head;

               less_pre=head;

           }

            else

            {  more_pre->next=head;

               more_pre=head;  

            }

               head=head->next;          

           }

           less_pre->next=more_head.next;

           more_pre->next=NULL;

           return less_head.next;

         

       }

   };

目录
相关文章
|
6月前
|
Go
【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
本文深入解析三道经典的动态规划问题:**最长递增子序列(LIS)**、**乘积最大子数组** 和 **分割等和子集**。 - **300. LIS** 通过 `dp[i]` 表示以第 `i` 个元素结尾的最长递增子序列长度,支持 O(n²) 动态规划与 O(n log n) 的二分优化。 - **152. 乘积最大子数组** 利用正负数特性,同时维护最大值与最小值的状态转移方程。 - **416. 分割等和子集** 转化为 0-1 背包问题,通过布尔型 DP 实现子集和判断。 总结对比了三题的状态定义与解法技巧,并延伸至相关变种问题,助你掌握动态规划的核心思想与灵活应用!
286 1
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
【数据结构】环形、相交、回文、分割、合并、反转链表
【数据结构】环形、相交、回文、分割、合并、反转链表
128 1
|
Python
【Leetcode刷题Python】131. 分割回文串
LeetCode题目131的Python编程解决方案,题目要求将给定字符串分割成所有可能的子串,且每个子串都是回文串,并返回所有可能的分割方案。
129 2
|
Python
【Leetcode刷题Python】416. 分割等和子集
LeetCode 416题 "分割等和子集" 的Python解决方案,使用动态规划算法判断是否可以将数组分割成两个元素和相等的子集。
193 1
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
存储 算法 数据可视化
LeetCode 132题详解:使用动态规划与中心扩展法解决分割回文串 II 的最少分割次数问题
LeetCode 132题详解:使用动态规划与中心扩展法解决分割回文串 II 的最少分割次数问题
|
存储 算法 数据可视化
LeetCode 131题详解:高效分割回文串的递归与动态规划方法
LeetCode 131题详解:高效分割回文串的递归与动态规划方法
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
159 2