【2.4链表】 链表分割

题目描述

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。

思路一

将大于x的节点形成一条链表larger,小于x的节点形成一条链表smaller,然后将两条链表连接 smaller + larger

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Partition:
    def partition(self, pHead, x):
        # 将大于x的节点形成一条链表larger,小于x的节点形成一条
        # 链表smaller,然后将两条链表连接 smaller + larger
        larger = ListNode(-1)
        smaller = ListNode(-1)
        p = smaller
        q = larger
        while pHead != None:
            if pHead.val < x:
                p.next = pHead
                p = p.next

            else:
                q.next = pHead
                q = q.next
            pHead = pHead.next
        q.next = None
        p.next = larger.next
        return smaller.next

思路二

先将大于等于x的和小于x的分别存入list中,然后再又list生成链表

class Partition:
    def partition(self, pHead, x):
        node1 = []
        node2 = []
        while pHead != None:
            if pHead.val < x:
                node1.append(pHead.val)
            else:
                node2.append(pHead.val)
            pHead = pHead.next
        new = ListNode(-1)
        p = new
        for i in node1 + node2:
            p.next = ListNode(i)
            p = p.next
        return new.next
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值