博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode学习笔记(86. 分隔链表)
阅读量:4049 次
发布时间:2019-05-25

本文共 1863 字,大约阅读时间需要 6 分钟。

在这里插入图片描述

方法一:遍历链表,用两个队列分别存储小于x和大于等于x的值,最后再合并:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {
public: ListNode* partition(ListNode* head, int x) {
queue
LowData; queue
HightData; ListNode* cur = head; while(cur!=nullptr){
if(cur->val
next; } ListNode* out = new ListNode(0); cur = out; while(!LowData.empty()){
cur->next = LowData.front(); cur = cur->next; LowData.pop(); } while(!HightData.empty()){
cur->next = HightData.front(); cur=cur->next; HightData.pop(); } cur->next = nullptr; return out->next; }};

方法二:引入了n个常量空间,因此想直接在链表上进行调整。需要引入双指针,先找到第一个不满足条件的值,再遍历后面寻找其他不满足条件的值插入。需要注意的是边界条件的情况以及删除插入过程的现成保护:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {
public: ListNode* partition(ListNode* head, int x) {
if(head==nullptr) return nullptr;; ListNode* new_head = new ListNode(0); new_head->next = head; ListNode* lp=new_head; ListNode* rp=head; while(rp->val
next; lp=lp->next; if(rp==nullptr) return head; } ListNode* mid = lp; while(rp!=nullptr){
if(rp->val
next = rp->next; rp = rp->next; temp->next = mid->next; mid->next = temp; mid = temp; } else{
rp=rp->next; lp=lp->next; } } return new_head->next; }};

转载地址:http://bvyci.baihongyu.com/

你可能感兴趣的文章
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>