思路:题目要求:链表中所有元素小于x值的,放在x左边,大于的放在右边
1.创建两个新的AB两个链表 同时创建两个链表的头结点方便进行尾插法
2.遍历链表 值小于x,把节点放在A链表里,否则放在B链表,然后将AB链表连接,注意尾节点置空和头结点的舍去;
public class Partition {
public ListNode partition(ListNode pHead, int x) {
if(null == pHead){
return null;
}
//创建两个链表 创建头结点方便尾插
ListNode listA = new ListNode(0);//创建链表
ListNode listAhead = listA;//头结点
ListNode listB = new ListNode(0);
ListNode listBhead = listB;
ListNode cur = pHead;//纪律pHead
//遍历链表 小于x放在listA中 大于放在listB中
while(null != cur){
if(cur.val < x){//尾插法
listAhead.next = cur;
listAhead = cur;
}else{
listBhead.next = cur;
listBhead = cur;
}
cur = cur.next;
}
//连接两个链表 listAhead是A的尾部 listB是元素为0的节点 所以指向listB.next
listAhead.next = listB.next;//跳过头结点0
listBhead.next = null;//连接后的链表尾部置空
return listA.next;//头结点是0 跳过头结点
}
}
运行结果: