##LeetCode—86. Partition List
####题目
给定一个链表和一个数,将链表中比这个数小的节点放到链表的左边,大于等于这个数的节点放到链表的右边。
注意形成的链表中该数的位置没有要求,例如虾米那这个例子,你的输出结果也可以是122345。
####思路及解法
这道题还是挺简单的,也没有空间复杂度的要求。就是遍历一遍链表,比较节点和给定数值的大小,按照要求放到两边。具体的,把比数值小的节点依次放到指针left后面,其他的依次放到指针right后面,然后将新形成的两个链表连接起来。
另外,我们在上一篇文章也说过,链表的题,只要涉及头结点的操作,就一定要使用一个dummy指针。
####代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null) return null;
ListNode dummyLeft = new ListNode(0);
ListNode dummyRight = new ListNode(0);
ListNode left = dummyLeft;
ListNode right = dummyRight;
while(head != null){
if(head.val < x){
left.next = new ListNode(head.val);
left = left.next;
}else{
right.next = new ListNode(head.val);
right = right.next;
}
head = head.next;
}
left.next = dummyRight.next;
return dummyLeft.next;
}
}