Java-链表分割【牛客网】

题目描述:

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。

解题思路:
创建两个新的链表:
big:这个链表中所有大于等于基准值的节点
small:这个链表中所有小于基准值的节点

基准值为4

在这里插入图片描述
把9和基准值4相比,9比基准值大:将9插入到big链表末尾
把5和基准值4相比,5比基准值大:将5插入到big链表末尾
把2和基准值4相比,2比基准值小:将2插入到small链表末尾

在这里插入图片描述
最后一步:
把两个链表首尾相连接:
smallTail.next=bigHead.next

代码实现:

public class Partition {
    
    
    public ListNode partition(ListNode pHead, int x) {
    
    
        if(pHead==null) {
    
    
         return null;
        }if(pHead.next==null) {
    
    
         return pHead;
        }
        ListNode bigHead=new ListNode(-1);
        ListNode bigTail=bigHead;
        ListNode smallHead=new ListNode(-1);
        ListNode smallTail=smallHead;
        for(ListNode cur=pHead;cur!=null;cur=cur.next) {
    
    
         if(cur.val<x) {
    
    
          smallTail.next=new ListNode(cur.val);
          smallTail=smallTail.next;
         }else {
    
    
          bigTail.next=new ListNode(cur.val);
          bigTail=bigTail.next;
         }
        }
        //将两个链表首尾相接
        smallTail.next=bigHead.next;
        return smallHead.next;
 }
}

代码测试:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44378053/article/details/105586797