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