您的位置:首页 > 编程语言 > Java开发

LeetCode 86(Partition List)java

2016-11-24 16:02 344 查看
原题: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
.


给一个链表,将小于值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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: