思路:
先读题,题中给一个x值,我们需要将链表通过给的值,左右分别放入小于x的数,和大于x的数。
可以这样操作,new两个链表,一个链表放入小于x的数,一个链表放入大于x的数,最后将两个链表进行链接。
链接细节:若 左表为nul,那么我们直接返回右边的头;若左边不为空,我们只需将右表的头,通过尾插法插入到左表的尾。在此之前,我们还需要判断右边的尾节点的nxet是否为空,不为空,我们需要手动制空。不然和出来的链表会带环。
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Partition {
public ListNode partition(ListNode pHead, int x) {
// write code here
ListNode cur=pHead;
//左边
ListNode leftHead=null;
ListNode left=null;
//右边
ListNode rightHead=null;
ListNode right=null;
//判断存左还是存右
while(cur!=null) {
if(cur.val<x) {
if(left==null) {
left=cur;
leftHead=cur;
}else {
left.next=cur;
left=left.next;
}
}else {
if(right==null) {
right=cur;
rightHead=cur;
}else {
right.next=cur;
right=right.next;
}
}
cur=cur.next;
}
//判断左是否为空
if(leftHead==null) {
return rightHead;
}
//连接两个链表
left.next=rightHead;
//判断右边尾结点next是否为空(若不是空,又没进行手动改空,链表会有环)
if(right!=null) {
right.next=null;
}
return leftHead;
}
}