【一天一道LeetCode】#86. Partition List
2016-06-09 10:55
316 查看
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or >equal to x.You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.
(二)解题
题目大意:给定一个链表和一个值,让小于给定值的结点都移到链表前面来,但不能改变这些数在原链表中的相对位置。解题思路:用两个指针,一个指向小于给定值的链表部分的尾结点,一个用于遍历链表。
/** * 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==NULL||head->next==NULL) return head; ListNode* lessTail = head;//小于x部分的尾节点 ListNode* p = head; ListNode* pre = NULL;//p前面的节点 bool isFirst = false;//如果头节点就大于x为true,反之false bool needToChange = false;//p前面的节点都小于x,则不需要改变,反之需要进行插入操作 if(head->val >= x) {isFirst = true;needToChange = true;}//如果第一个数就大于x,需要改变头节点 while(p!=NULL) { if(p->val < x) { if(isFirst)//需要改变头节点 { ListNode* temp = p->next; pre->next = p->next; p->next=head; lessTail = p; head = p; p = temp; isFirst = false; } else { if(!needToChange)//前面部分都小于x,则不需要改变 { lessTail = p; pre = p; p=p->next; } else//需要进行插入操作 { ListNode* temp = p->next; pre->next = p->next; p->next = lessTail->next; lessTail->next = p; lessTail = p;//注意要改变小于x部分的尾节点 p = temp; } } } else { pre = p; p=p->next; needToChange = true; } } return head; } };
后记:在这里祝大家端午节快乐,也给端午节还在坚持刷题的我自己点个赞。哈哈!
相关文章推荐
- XPath与lxml_3XPath坐标轴
- Zabbix3.0安装部署最佳实践
- 1B. Spreadsheets【进制转换】
- actionbar以及制定
- 搭建Nginx与tomcat整合,用Nginx代替apache
- Linux环境下字符设备驱动开发入门
- actionbar setDisplayOptions用法详解
- Mysql优化方案二之数据库类型选择及Sql语句优化
- 浅谈HashMap与HashTable
- GBK 编码
- Python函数
- CentOS下安装Nginx
- python使用网易云音乐 api下载mv
- BZOJ 1072: [SCOI2007]排列perm
- 机器学习文章
- asp.net提取多层嵌套json数据的方法
- 内装式模块
- 6框架、文档和窗口
- django 2
- 元素过滤器(Element Filters)