public ListNode partition(ListNode head, int x) {
// 1.使用两个链表分别存放小于x的节点和大于等于x的节点
// 2.声明两个节点表示两个链表的首节点
ListNode leftNodeFirst = null;
ListNode rightNodeFirst = null;
// 3.声明两个节点表示两个链表的尾节点
ListNode leftNodeEnd = null;
ListNode rightNodeEnd = null;
// 4.循环遍历传入的链表,进行节点处理,小于x的节点放到leftNodeFirst链表尾部,大于等于x的节点放到rightNodeFirst链表尾部
while (head != null) {
// 避免原有节点的next指针的影响,生成新的节点进行处理
ListNode currentNode = new ListNode(head.val);
if (head.val < x) {
if (leftNodeFirst == null) {
leftNodeFirst = currentNode;
leftNodeEnd = currentNode;
} else {
leftNodeEnd.next = currentNode;
leftNodeEnd = leftNodeEnd.next;
}
} else {
if (rightNodeFirst == null) {
rightNodeFirst = currentNode;
rightNodeEnd = currentNode;
} else {
rightNodeEnd.next = currentNode;
rightNodeEnd = rightNodeEnd.next;
}
}
head = head.next;
}
// 小于x的节点存在时,将大于等于x的节点放入它的后面,大于等于x的节点不存在也不影响
if (leftNodeFirst != null) {
leftNodeEnd.next = rightNodeFirst;
} else {
// 小于x的节点不存在时,使用大于等于x的节点链表作为返回结果,大于等于x的节点不存在也不影响
leftNodeFirst = rightNodeFirst;
}
// 返回左侧节点
return leftNodeFirst;
}
10-05
155