思路: 先读题,题中给一个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; } }