LintCode Partition List 链表划分
2015-07-11 21:14
330 查看
中文版:
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
English Version
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->null and x = 3,
return 1->2->2->4->3->5->null.
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
English Version
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->null and x = 3,
return 1->2->2->4->3->5->null.
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param x: an integer * @return: a ListNode */ public ListNode partition(ListNode head, int x) { if(null == head || head.next == null) return head; ListNode node = new ListNode(Integer.MIN_VALUE); node.next = head; head = node; ListNode p = head, q = head; while(null != q && q.val < x){//找到大于等于x的节点 q = q.next; } if(null == q) return head.next;//所有节点值均小于x while(p.next != q) {//p指向q的上一个节点 p = p.next; } while(null != q.next) {//q遍历链表,将值小于x的节点顺次移到p后面 if(q.next.val < x) { ListNode l = q.next; q.next = q.next.next; l.next = p.next; p.next = l; p = p.next; continue; } q = q.next; } return head.next; } }
相关文章推荐
- python类的继承的两种方式
- in_array()和explode()的使用笔记
- std::tr1::shared_ptr 使用的一点体会
- C语言及程序设计 实践项目――C语言程序初体验
- PAT乙级 1003. 我要通过!
- hdu 1051 Wooden Sticks(贪心)
- dts从uboot加载到kernel使用案例的分析
- java中的stack
- C语言及程序设计 例程 - C语言程序初体验
- 【计蒜客系列】挑战难题5:矩阵翻转
- FMOD在Android玩音响系统的抖动问题
- 朴素贝叶斯之邮件分类
- leetCode 44.Wildcard Matching (通配符匹配) 解题思路和方法
- uva 104 arbitrage(套利)
- 用缓动函数模拟碰撞效果
- Text Justification
- 大约SQL现场“这包括”与“包括在”字符串的写法
- python 命令行参数解析
- 【啊哈!算法】算法6:只有五行的Floyd最短路算法
- java面向对象学习心得