leetcode 86. 分隔链表

2019-05-30  本文已影响0人  topshi

题目描述

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

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

思路:
思路其实和荷兰国旗问题的partition差不多,只是有些边界问题需要注意。

/**
 * 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(head == null) return null;
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        head = dummy;
        ListNode left = head;
        for(ListNode p = head;p.next != null;){
            if(p.next.val < x){
                ListNode tmp = p.next;
                p.next = tmp.next;
                tmp.next = left.next;
                left.next = tmp;
                left = left.next;
                p = p.next == left?p.next:p;
            }else{
                p = p.next;
            }
        }
        return head.next;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读