面试11之以给定值x为基准将链表分割成两部分
来源:互联网 发布:男友忙后没时间 知乎 编辑:程序博客网 时间:2024/05/18 07:27
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
分析:(1)创建两个链表,把大于等于x的放到链表big,小于x的放到链表small
(2)将两个链表拼接起来,注意处理链表的头尾结点。
#include<iostream>using namespace std;#include<vector>struct ListNode{int val;struct ListNode *next;ListNode(int x):val(x),next(NULL) { }};ListNode* Partition(ListNode*pHead,int x){if(pHead == NULL)return NULL;ListNode *smallstart = NULL;ListNode *smallend = NULL;ListNode *bigstart = NULL;ListNode *bigend = NULL;ListNode *pCur = pHead;while(pCur){if (pCur->val < x){if (smallend == NULL) //表示这是小的部分的头结点{smallstart = smallend = pCur;}else{smallend->next = pCur;smallend = pCur;}}else{if(bigend == NULL) //表示这是大于或等于x的头结点{bigstart = bigend = pCur;}else{bigend->next = pCur;bigend = pCur;}}pCur = pCur->next;}if(smallend != NULL){smallend->next = bigstart;}if(bigend != NULL){bigend->next = NULL;}return smallstart == NULL ? bigstart: smallstart;}void test(){ListNode *p1 = new ListNode(1);ListNode *p2 = new ListNode(8);ListNode *p3 = new ListNode(3);ListNode *p4 = new ListNode(2);ListNode *p5 = new ListNode(7);p1->next = p2;p2->next = p3;p3->next = p4;p4->next = p5;ListNode *pHead =Partition(p1,3);while (pHead){cout << pHead->val << " ";pHead = pHead->next;}cout <<endl;delete p1;delete p2;delete p3;delete p4;delete p5;}int main(){test();cout << "hello..." <<endl;return 0;}
0 0
- 面试11之以给定值x为基准将链表分割成两部分
- 程序员面试金典: 9.2链表 2.4以给定值x为基准将链表分割成两部分
- 程序员面试金典2.4:给定值x为基准将链表分割成两部分
- 【Java】以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于等于x的结点之前
- 9.2链表(四)——以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的节点之前
- 链表分割 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以
- CCI 2.4 以某数为基准分割链表
- 快速排序 和 把一个无序的整形数组分成两部分(以数组第一个数为基准进行划分)
- 值x将链表划分为两部分,小于x的结点排在大于或等于x 的结点之前
- 以时间为基准进行求解
- 快速排序(以中间为基准)
- 程序员面试金典(5)以值x分割链表,小的在前面,大于等于的在后面
- 【杂项】按照给定序列为基准进行排序
- 将单文档视图窗口分割成两部分
- C#控制台基础 将以-分割的年月日转换为x年x月x日,用split
- 将一行元素以:为界提取为前后两部分
- 买服务器:以基准测试指标为准绳
- 以某个表为基准连表查询分析
- 库和框架的概念区分
- C
- java日期类的操作
- SpringMVC学习(6):使用 POJO对象绑定请求参数值(
- 九宫格 回溯算法
- 面试11之以给定值x为基准将链表分割成两部分
- Java动态代理的两种实现方法
- 【推荐】免费论文查重网站
- Java基础学习笔记:(九)简单java类深入
- shell脚本输出输出带颜色内容
- nginx在MAC上的安装、启动、重启和关闭
- 初步认识WebSocket技术
- 贪心之悼念512汶川大地震遇难同胞
- 在Windows上搭建Cocos2d-x 3.0开发环境