【路飞】算法与数据结构-面试题 02.04. 分割链表

120 阅读1分钟

LeetCode:地址

题目要求

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

你不需要 保留 每个分区中各节点的初始相对位置。

示例 1:

partition1.jpg

输入: 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;
};