LeetCode:地址
题目要求
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你不需要 保留 每个分区中各节点的初始相对位置。
示例 1:
输入: head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例 2:
输入: head = [2,1], x = 2
输出:[1,2]
提示:
- 链表中节点的数目在范围
[0, 200]内 -100 <= Node.val <= 100-200 <= x <= 200
思路
此处撰写解题思路
深度优先遍历,就是先到底部再进行逻辑处理,但是再先到底部的时候的时候先找出小于x的,然后剩下的逻辑处理就只需要判断是否大于等于x就可以了。
代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} x
* @return {ListNode}
*/
var partition = function(head, x) {
if(!head)return null;
var resNode = new ListNode();
var currentNode = resNode;
let isFirst = true;
function eachData(data){
if(data.val < x){
if(isFirst){
currentNode.val = data.val;
isFirst = false;
}else{
currentNode.next = new ListNode(data.val)
currentNode = currentNode.next;
}
}
if(data.next){
eachData(data.next)
}
if(data.val >= x){
if(isFirst){
currentNode.val = data.val;
isFirst = false;
}else{
currentNode.next = new ListNode(data.val)
currentNode = currentNode.next;
}
}
}
eachData(head);
return resNode;
};