Skip to content

Latest commit

 

History

History
66 lines (54 loc) · 2.2 KB

86.md

File metadata and controls

66 lines (54 loc) · 2.2 KB

✏️基础刷题之(86. Partition List)


. 2020-01-15 吴亲库里 库里的深夜食堂

✏️描述

给定一个链表和一个特定的值。让我们分割链表,使得所有小于给定值 (即这里的x) 的节点都位于大于或者等于 x 之前。题目要求我们保留节点的初始相对位置。


✏️题目实例


✏️题目分析

这个问题的解决关键就在于 改变后的链表有一个规律,即在某个点上,必然存在该点之前的元素都小于 x,该点之后的数都大于等于x。也就是说我们可以设置初始化两个链表,然后遍历原链表,把小于x 的节点放置到其中一个链表(beforeNode),大于等于 x 的放置到另一个链表(afterNode),这样的话最后我们只要把这两个链表连接起来即可。因为我们遍历原链表是从头到尾的,所以也不会去改变他们的相对位置。

✏️最终实现代码

/**
 * Definition for a singly-linked list.
 * class ListNode {
 *     public $val = 0;
 *     public $next = null;
 *     function __construct($val) { $this->val = $val; }
 * }
 */
class Solution {

    /**
     * @param ListNode $head
     * @param Integer $x
     * @return ListNode
     */
    function partition($head, $x) {
        $beforeNode=new ListNode(-1);
        $afterNode=new ListNode(-1);
        $before=$beforeNode;
        $after=$afterNode;
        while($head !=null){
            if($head->val<$x){
                $before->next=$head;
                $before=$before->next;
            }else{
                $after->next=$head;
                $after=$after->next;
            }
            $head=$head->next;
        }
        $after->next=null;
        $before->next=$afterNode->next;
        return $beforeNode->next;
    }
}

联系