zoukankan      html  css  js  c++  java
  • LeetCode:86. 分隔链表

    1、题目描述

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

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

    示例:

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

    2、题解

    2.1、解法一

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
    
        def partition(self, head, x):
            """
            :type head: ListNode
            :type x: int
            :rtype: ListNode
            """
            node = head
            prev = None
            stack = []
    
            ## 提取
            while node:
                if node.val < x:
                    if not prev:
                        head = node.next
                    else:
                        prev.next = node.next
                    stack.append(node)
                else:
                    prev = node
                node = node.next
    
            ## 插入
            cur_node = None
            while len(stack) >0:
                tmp = stack.pop(0)
                tmp.next = None
                if not cur_node:
                    tmp.next = head
                    head = tmp
                else:
                    tmp.next = cur_node.next
                    cur_node.next = tmp
                cur_node = tmp
    
            ## 获取
            n = head
            ret = []
            while n:
                # print(n.val)
                ret.append(n.val)
                n = n.next
                
            return ret
    

      

  • 相关阅读:
    常用控件
    ThinkJS 中的Logic层
    ctx简介
    小程序商城的配置文件初读
    webstorm快捷键
    vue.js入门
    前端技术俗语js
    vue环境中生成二维码
    第二章第一个项目——关于mime
    第二章第一个项目——package.json
  • 原文地址:https://www.cnblogs.com/bad-robot/p/10065432.html
Copyright © 2011-2022 走看看