题目描述:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-list
解题思路及代码:
### 解题思路
对于此题而言,只需要构建两个新链表,一个保存小于X的结点,一个保存大于X的结点,再将两个链表进行连接即可。
需要注意的是:
1.两个新链表均需要虚拟头结点的指向,以便于找到起始结点;
2.新链表的存储结点操作即是简单的插入操作。
### 代码
```python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
r1, r2 = ListNode(), ListNode()
p1, p2 = r1, r2
p = head
while p:
q = p.next
if p.val < x:
p.next = p1.next
p1.next = p
p1 = p
else:
p.next = p2.next
p2.next = p
p2 = p
p = q
p1.next = r2.next
return r1.next
```
运行结果: