题意:给定一个单链表和一个x,把链表中小于x的放到前面,大于等于x的放到后面,每部分元素的原始相对位置不变。
例子:
给定链表 1->4->3->2->5->2 并且x = 3,
返回链表 1->2->2->4->3->5.
思路:其实很简单,遍历一遍链表,把小于x的都挂到left后,把大于等于x的都放到right后,最后再把大于等于的链表挂到小于链表的后面就可以了。
注意:再强调一遍,如果涉及到head节点的操作,一定要声明dummy变量作为头节点的前置节点,然后返回dummy.next。
/**
* 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 left = dummyLeft;
ListNode dummyRight = new ListNode(0);
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;
}
}