题目:
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
代码:
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
if(pHead == null){//判断链表是否为空
return null;
}
ListNode cur = pHead; //计算链表长度
int count = 0;
while(cur != null){
count++;
cur = cur.next;
}
ListNode beforStart = null;
ListNode beforEnd = null;//返回的头结点
ListNode afterStart = null;//小于x的值的头结点
ListNode afterEnd = null;//大于等于X的值的头结点
cur = pHead;
while(cur != null){
ListNode curNext = cur.next;
cur.next = null;
if(cur.val < x){
if(beforStart == null){ //如果头结点为空,则先表示为小于x的值的头结点
beforStart = cur;
beforEnd = cur;
}else{
beforEnd.next = cur;
beforEnd = cur;
}
}else{
if(afterStart == null){ //如果头结点为空,则先表示为大于等于x的值的头结点
afterStart = cur;
afterEnd = cur;
}else{
afterEnd.next = cur;
afterEnd = cur;
}
}
cur = curNext;
}
if(beforStart == null){ //遍历结束也没有一个小于X的值
return afterStart;
}
beforEnd.next = afterStart;
return beforStart;
}
}