给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

示例:

输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5

这个可以看成两部分,前一部分都是值小于x的节点,后一部分就是大于等于x的,最后将两个部分链起来就完事了。
(需要注意的是后半部分的最后需要置成null,否则原链表后面还有小于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) {
        if(null==head){
            return head;
        }
        
        ListNode node1 = new ListNode(-1);
        ListNode node2 = new ListNode(-1);  
        ListNode pre = node1;
        ListNode nex = node2;  
        
        while(head!=null){
            if(head.val<x){
                pre.next = head;
                pre = pre.next;
            }else{
                nex.next = head;
                nex = nex.next;
                
            }
            head = head.next;
        }
        nex.next = null;
        pre.next = node2.next;
        return node1.next;
        
    }
}
Last modification:November 7th, 2019 at 05:15 am
大家一起分享知识,分享快乐