题解 | #链表分割#

链表分割

https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70

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) {
        //比x小,bs and he为前链表的头和尾
       ListNode bs=null;
       ListNode be=null;
       //比x大, as and ae...
       ListNode as=null;
       ListNode ae=null;
       //定义新的头,防止phead指针移动,影响其他使用操作
       ListNode head=pHead;
       //遍历链表
       while(head!=null){
        //比x小,存前链表中
        if(head.val<x){
            if(bs==null){
                bs=be=head;
                head=head.next;
            }else{
                be.next=head;
                be=be.next;
                head=head.next;
            }
        }else{      //比X大
            if(as==null){
                as=ae=head;
                head=head.next;
            }else{
                ae.next=head;
                ae=ae.next;
                head=head.next;
            }
        }
       }
       //bs=null,前链表为空
        if(bs==null){
            return as;
        }
        //as=null,后链表为空,走到这里,前链表不可能为空
        if(as==null){
            be.next=as;//最后节点next置空
            return bs;
        }
        //走到这里,前后链表都不为空,连接两个链表尾头,这里后链表的尾可能不为空,进行判断!!!
        if(ae.next!=null){
            ae.next=null;
        }
        be.next=as;
        return bs;
    }
}

#小厂也是厂,三千我也干#
全部评论

相关推荐

09-19 14:12
武汉大学 golang
并没有发笔试,只是顺延了两次,去看官网发现流程结束了
无敌忍耐王:三个工作日没人捞就自动结束了
投递美团等公司10个岗位
点赞 评论 收藏
分享
09-01 16:46
已编辑
门头沟学院 Java
mmvvpp:错了!!给了offer之后还有试用期,试用期过了就完事了?错了!还有每个季度的kpi考核,拿一个c就等着被劝退。那我好好干不拿c不就完了?错了!最多三年劳动合同到期,续不续期未知数。每年都有1800w毕业生毕业,今年你是小萌新蜜月期,明年你是老油条,长江后浪推前浪,前浪死在沙滩上。这就是——互联网!
秋招的破防瞬间
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务