1.题目

2.思路
首先维护两个链表,一个链表存储小于x的数,另一个链表存储大于x的数。然后再用小链表的最后一个数指向大链表的第一个数,大链表的最后一个数指向NULL。
创建两个虚拟头结点分别指向小链表的第1个节点和大链表的最后一个节点。
largehead不变的,暂存了大链表的头结点。smallhead不变的,暂存了小链表的头结点
3.代码实现
java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode small=new ListNode(0);
ListNode smallHead=small;
ListNode large=new ListNode(0);
ListNode largeHead=large;
//如果头结点不为空
while(head!=null)
{
if(head.val<x)
{
//小链表虚拟头结点的下一个数指向小链表的头结点
small.next=head; //1=1
small=small.next;//small=
}else
{large.next=head;
//大链表的虚拟头结点的下一个数 指向大链表的头结点
large=large.next;
}
//如果数顺序排序的,head指针后移
head=head.next;
}
//最后重新链接一下大链表和小链表
//大链表的最后一个节点的下一个数指向空
large.next=null;
//小链表的最后一个结点的下一个数指向大链表的第一个数
//largehead不变的,暂存了大链表的头结点
small.next=largeHead.next;
//返回小链表的第一个数,smallhead不变的,暂存了小链表的头结点
return smallHead.next;
}
}