JAVA OJ练习第6题——链表分割

牛客链接:链表分割

题目描述:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前且原顺序不变

思维逻辑图如下:

先将x的数字拍成一个新链表,最后将这两个链表连在一起即可。
bs: be: as:>x新链表的头(b start);
ae:>x新链表的尾(b end);
将两个新链表连在一起只需让be指向as即可。

下图以x = 3为例来说明:
JAVA OJ练习第6题——链表分割_第1张图片

代码如下:

public class Partition {
     
    public ListNode partition(ListNode pHead, int x) {
     
        ListNode cur = pHead;
        ListNode bs = null;
        ListNode be = null;
        ListNode as = null;
        ListNode ae = null;
        while(cur != null) {
     
            if(cur.val < x) {
     
                //判断是不是第一次插入
                if(bs == null) {
     
                    bs = cur;
                    be = bs;
                }else {
     
                    be.next = cur;
                    be = be.next;//be = cur;
                }
            }else {
     
                //判断是不是第一次插入
                if(as == null) {
     
                    as = cur;
                    ae = cur;
                }else {
     
                    ae.next = cur;
                    ae = ae.next;//ae = cur;
                }
            }
            cur = cur.next;
        }
        if(bs == null){
     
            return as;
        }
        be.next = as;
        if(as != null) {
     
            ae.next = null;
        }
        return bs;
    }
}

下一题:删除链表中重复的结点
在这里插入图片描述

你可能感兴趣的:(JAVA,以x为基准分割链表,原顺序不变)