Java——将单向链表按某值划分成左边小、中间相等、右边大的形式(进阶问题)

【题目】
  与上一篇博客相似,唯一的不同就是在原问题的要求智商再增加如下两个要求。
  在左、中、右三个部分的内部也做顺序要求,要求每部分里的节点从左到右的顺序与原链表中节点的先后次序一致

【代码】

public static Node listPartition2(Node head,int pivot) {
    Node sH = null;
    Node sT = null;
    Node eH = null;
    Node eT = null;
    Node bH = null;
    Node bT = null;
    Node next =null;
    while(head!=null) {
        next = head.next;
        head.next = null;
        if(head.value < pivot) {
            if(sH==null) {
                sH = head;
                sT = head;
            }else {
                sT.next = head;
                sT = head;
            }
        }else if(head.value == pivot) {
            if(eH==null) {
                eH = head;
                eT = head;
            }else {
                eT.next = head;
                eT = head;
            }
        }else {
            if(bH==null) {
                bH = head;
                bT = head;
            }else {
                bT.next = head;
                bT = head;
            }
        }
        head = next;
    }
    if(sT != null) {
        sT.next = eH;
        eT = eT == null ? sT : eT;
    }
    if(eT!=null) {
        eT.next = bH;
    }
    return sH != null ? sH : eH !=null ? eH : bH;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值