OJ题-编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前(牛客网)

在这里插入图片描述

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) {
        // write code here
        ListNode less = null;//这是小于x的元素所在的链表
        ListNode lessLast = null;//小于x的链表的最后一个结点
        
        ListNode great = null;//这是大于等于x的元素所在的链表
        ListNode greatLast = null;//大于等于x的链表的最后一个结点
        
        ListNode cur = pHead;//从原链表的头结点开始遍历
        while (cur != null) {
            if (cur.val < x) {//当原链表中的元素小于x时
                if(less == null) {//当小于x的链表为空时
                    less = cur;
                }else{//当小于x的链表不为空时
                    lessLast.next = cur;
                }
                lessLast = cur;//相当于让lessLast也往后走了一步
            }else{//当原链表中的元素大于等于x时
                if(great == null) {
                    great = cur;
                }else{
                    greatLast.next = cur;
                }
                greatLast = cur;
            }
            cur = cur.next;
        }
        //或许会有一个空链表
        if(less == null) {
            return great;
        }else{
            lessLast.next = great;
            if(greatLast != null){
                greatLast.next = null;
            }
            return less;
        }
    }
}
发布了61 篇原创文章 · 获赞 3 · 访问量 1207

猜你喜欢

转载自blog.csdn.net/qq_44847147/article/details/104006320