leetcode刷题(单链表)3—分隔链表

86. 分隔链表

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。

当单链表拆分时巨麻烦时,可以多开空间,简化问题

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public ListNode partition(ListNode head, int x) {
    
    
        ListNode k = head;
        //比x小的
        ListNode ahead = new ListNode();
        //比x大的
        ListNode bhead = new ListNode();
        ListNode before = new ListNode();
        ListNode p = ahead;
        ListNode q = bhead;
        int flag = 0;
        if(head == null)
            return head;
        while(k != null){
    
    
            if(k.val >= x){
    
    
                q.next = new ListNode();
                q = q.next;
                q.val = k.val; 
               // System.out.println("0: q.val : "+q.val);
                k = k.next;
            }else{
    
    
               p.next = new ListNode();
                p = p.next;
                p.val = k.val; 
               // System.out.println("1: p.val : "+p.val);
                k = k.next;
            }
        }
       
        ahead = ahead.next;
        if(ahead == null)
            return bhead.next;
        p.next = bhead.next;
       
        return ahead;
        
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38754625/article/details/108521599
今日推荐