以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前

思路:定义两个新链表,一个放小于基准的部分,一个放小于基准的部分,然后定义一个cur遍历整个链表,判断节点大小将节点插入相应的链表

public ListNode partition(int x){
        if(head==null||head.next==null){
            return head;
        }
        ListNode cur=this.head;
        ListNode beforeStart=null;
        ListNode beforeEnd=null;
        ListNode afterStart=null;
        ListNode afterEnd=null;
        while(cur!=null){
            if(cur.data<x){
                if(beforeStart==null){
                    beforeStart=cur;
                    beforeEnd=cur;
                }else{
                    beforeEnd.next=cur;
                    beforeEnd=cur;
                }
            }else{
                if(afterStart==null){
                    afterStart=cur;
                    afterEnd=cur;
                }else{
                    afterEnd.next=cur;
                    afterEnd=cur;
                }
            }
            cur=cur.next;
        }
        if(beforeStart==null){
            return afterStart;
        }
        beforeEnd.next=afterStart;
        if(afterEnd!=null){
            afterEnd.next=null;
        }
        return beforeStart;
    }
发布了67 篇原创文章 · 获赞 12 · 访问量 1521

猜你喜欢

转载自blog.csdn.net/qq_42174669/article/details/102874416