LeetCode 86(Partition List)java
2016-11-24 16:02
435 查看
原题: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的结点的前面,不要改变结点之间的顺序(例如1,4,3,2,5,2 将2结点提到至4的前面,但4,3,5的顺序不变);
思路:设置一个变量,记录下链表中第一次出现大于等于值x结点的位置insertPos。之后遍历链表,将所有小于值x的结点提到这个位置上;
需要注意的是,提取结点时的操作:1.当前结点的上一个结点的next指向当前结点的next;2.当前结点的next指向insertPos的next,insertPos的next指向当前结点;
链表的题目主要是考察对链表的操作,以及边界情况的处理;
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
ListNode preHead=new ListNode(0);
preHead.next=head;
ListNode pre=preHead;
ListNode cur=head;
ListNode insertPos=null;
while(cur!=null){
//定位需要插入的位置;
if(cur.val>=x && insertPos==null){
insertPos=pre;
}
//插入操作;
if(cur.val<x && insertPos!=null){
pre.next=pre.next.next;
cur.next=insertPos.next;
insertPos.next=cur;
insertPos=insertPos.next;
cur=pre.next;
continue;
}
pre=pre.next;
cur=cur.next;
}
return preHead.next;
}
}
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->2and x =
3,
return
1->2->2->4->3->5.
给一个链表,将小于值x的结点放到所有大于等于值x的结点的前面,不要改变结点之间的顺序(例如1,4,3,2,5,2 将2结点提到至4的前面,但4,3,5的顺序不变);
思路:设置一个变量,记录下链表中第一次出现大于等于值x结点的位置insertPos。之后遍历链表,将所有小于值x的结点提到这个位置上;
需要注意的是,提取结点时的操作:1.当前结点的上一个结点的next指向当前结点的next;2.当前结点的next指向insertPos的next,insertPos的next指向当前结点;
链表的题目主要是考察对链表的操作,以及边界情况的处理;
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
ListNode preHead=new ListNode(0);
preHead.next=head;
ListNode pre=preHead;
ListNode cur=head;
ListNode insertPos=null;
while(cur!=null){
//定位需要插入的位置;
if(cur.val>=x && insertPos==null){
insertPos=pre;
}
//插入操作;
if(cur.val<x && insertPos!=null){
pre.next=pre.next.next;
cur.next=insertPos.next;
insertPos.next=cur;
insertPos=insertPos.next;
cur=pre.next;
continue;
}
pre=pre.next;
cur=cur.next;
}
return preHead.next;
}
}
相关文章推荐
- (java)leetcode-86:Partition List
- leetcode JAVA Partition List 难度系数3 3.30
- leetcode:Partition List 【Java】
- [LeetCode 86] Partition List Solution
- LeetCode86之PartionList的java题解
- Partition List leetcode java
- LeetCode(86) Partition List
- leetcode partition List c++
- [LeetCode][Java] Reverse Linked List II
- [LeetCode-237]Delete Node in a Linked List(java)
- [leetcode-341]Flatten Nested List Iterator(java)
- leetcode Remove Nth Node From End of List(Java)
- LeetCode Partition List
- (java)leetcode Delete Node in a Linked List
- leetcode之Partition List
- Leetcode: Sort List (Java)
- LeetCode 142 — Linked List Cycle II(C++ Java Python)
- Leetcode:83. Remove Duplicates from Sorted List(JAVA)
- LeetCode 82之Remove Duplicates from Sorted List II的Java题解
- Java [Leetcode 83]Remove Duplicates from Sorted List