[leetcode]Partition List
2014-03-23 02:19
323 查看
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
3,
return
题意:给了一个链表和一个值x, 分割这个链表让所有小于x的节点到所有大于或者等于x值的节点前面来
一开始我没看清楚题,这个题陈述的让人得仔细看一眼。 看例子来说,让所有小于3的点,都到4前面来,因为4比三大
思路:
先说小于x的点怎么办,那只能是走到2的前面的点,看看next.val是不是小于x,小于了x就把它弄出来,让x指向这个点的后面一个点
然后,把它从前面找,直到找到一个大于等于3的点,放在这个点前面。
那么关键就在于,从哪个点分割?我们首先得找到一个分割的点。 所以遍历一遍链表,直到下一个点的值比x大,那么我们就从这点的后面开始找小于x的点,这个点就是分割点。从这个点开始,不断的查看下一个点的大小,大的跳过,向前进一个节点,小的就切出去,弄到前面去。
public ListNode partition(ListNode head, int x) {
if(head==null) return null;
//traversal
ListNode tar=head;
while(tar.val<x&&tar.next!=null) tar=tar.next;
ListNode fakehead=new ListNode(0);
fakehead.next=head;
ListNode temp=null;
while(tar.next!=null){
if(tar.next.val<x){
temp=tar.next;
tar.next=tar.next.next;
temp.next=null;
}
else tar=tar.next;
//has fetched that node, then
ListNode start=fakehead;
if(temp!=null){
while(start.next.val<x){
start=start.next;
}
ListNode larger=start.next;
start.next=temp;
temp.next=larger;
}
}
return fakehead.next;
}
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given
1->4->3->2->5->2and x =
3,
return
1->2->2->4->3->5.
题意:给了一个链表和一个值x, 分割这个链表让所有小于x的节点到所有大于或者等于x值的节点前面来
一开始我没看清楚题,这个题陈述的让人得仔细看一眼。 看例子来说,让所有小于3的点,都到4前面来,因为4比三大
思路:
先说小于x的点怎么办,那只能是走到2的前面的点,看看next.val是不是小于x,小于了x就把它弄出来,让x指向这个点的后面一个点
然后,把它从前面找,直到找到一个大于等于3的点,放在这个点前面。
那么关键就在于,从哪个点分割?我们首先得找到一个分割的点。 所以遍历一遍链表,直到下一个点的值比x大,那么我们就从这点的后面开始找小于x的点,这个点就是分割点。从这个点开始,不断的查看下一个点的大小,大的跳过,向前进一个节点,小的就切出去,弄到前面去。
public ListNode partition(ListNode head, int x) {
if(head==null) return null;
//traversal
ListNode tar=head;
while(tar.val<x&&tar.next!=null) tar=tar.next;
ListNode fakehead=new ListNode(0);
fakehead.next=head;
ListNode temp=null;
while(tar.next!=null){
if(tar.next.val<x){
temp=tar.next;
tar.next=tar.next.next;
temp.next=null;
}
else tar=tar.next;
//has fetched that node, then
ListNode start=fakehead;
if(temp!=null){
while(start.next.val<x){
start=start.next;
}
ListNode larger=start.next;
start.next=temp;
temp.next=larger;
}
}
return fakehead.next;
}
相关文章推荐
- [LeetCode] Partition List
- [leetcode-86]Partition List(c)
- LeetCode | Partition List(partition方法处理链表)
- [Leetcode]Partition List
- leetcode-- Partition List
- [Leetcode] #86 Partition List
- leetcode 118: Partition List
- LeetCode-Partition List
- LeetCode 86 Partition List (链表)
- LeetCode:Partition List
- Leetcode: Partition List
- [leetcode] Partition List
- [leetcode]Partition List
- [leetcode]Partition List
- leetcode---Partition List
- LeetCode(87)Partition List
- LeetCode || Partition List
- [LeetCode] Partition List 划分链表
- 【LeetCode】Partition List 解题报告
- leetcode之Partition List