您的位置:首页 > 其它

链表分化

2016-07-15 11:17 155 查看
对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。

如特定值val,把链表遍历,小于等于val的生成一个链表,大于的生成一个链表

/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/
public class Divide {
public ListNode listDivide(ListNode head, int val) {
// write code here
if(head==null||head.next==null)
{
return head;
}

//小于部分
ListNode sh = null;
ListNode st = null;

//大于部分
ListNode bh = null;
ListNode bt = null;

ListNode next = null;

ListNode p = head;

while(p!=null)
{
next = p.next;
p.next = null;
if(p.val<=val)
{
if(sh==null)//sh和st实际上为引用,对其操作的效果相同
{
sh = p;
st = p;
}else
{
st.next = p;
st = p;
}

}else{
if(bh==null)
{
bh = p;
bt = p;
}else
{
bt.next = p;
bt = p;
}
}
p = next;
}
if(st!=null)
{
st.next = bh;
}

return sh!=null?sh:bh;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表