image.png

思路

image.png

主要思路是创建两个链表,一个保存值小于x的元素,另一个保存值大于等于x的元素。最后进行合并

算法

image.png
image.png
image.png
image.png

code

  1. public ListNode partition(ListNode head, int x) {
  2. //设立两个虚拟头结点 分别保存比x小的元素和比x大的元素
  3. ListNode before_head = new ListNode(-1);
  4. ListNode after_head = new ListNode(-1);
  5. ListNode before = before_head;
  6. ListNode after = after_head;
  7. while(head!=null){
  8. if(head.val<x){ //如果遇到比x小的元素
  9. before.next = head;
  10. before = before.next;
  11. }else{
  12. after.next = head;
  13. after = after.next;
  14. }
  15. head = head.next;
  16. }
  17. after.next = null; //后面部分的尾部设为null
  18. before.next = after_head.next; //连接上两个链表
  19. return before_head.next; //返回第一部分的虚拟头结点的next
  20. }