编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
public ListNode partition(int x) {
ListNode bs = null;
ListNode be = null;
ListNode as = null;
ListNode ae = null;
ListNode cur = this.head;
while (cur != null) {
//判断是否小于x
if (cur.data < x) {
//判断是不是第一次插入
if (bs == null) {
bs = cur;
be = bs;
} else {
be.next = cur;
be = be.next;
}
} else {
//判断是不是第一次插入
if (as == null) {
as = cur;
ae = as;
} else {
ae.next = cur;
ae = ae.next;
}
}
cur = cur.next;
}
//第一个区间没有数据
if (bs == null) {
return as;
}
//将两个区间连接
be.next = as;
//将as.next置为空
if (as != null) {
ae.next = null;
}
return bs;
}
public void display3(ListNode newHead) { //要从新的头开始打印,需要接受newHead
if (newHead == null) {
return;
}
ListNode cur = newHead;
while (cur != null) {
System.out.print(cur.data + " ");
cur = cur.next;
}
System.out.println();
}
测试代码:
class Test3 {
public static void main(String[] args) {
MySingleList mySingleList = new MySingleList();
mySingleList.addLast(2);
mySingleList.addLast(1);
mySingleList.addLast(9);
mySingleList.addLast(3);
mySingleList.addLast(10);
mySingleList.addLast(8);
mySingleList.addLast(66);
mySingleList.addLast(7
mySingleList.display();
ListNode newHead=mySingleList.partition(5);
mySingleList.display3(newHead);
}
}