【leetcode】86. 分隔链表【链表】

题目:

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

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

示例:

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

思路一:

标志节点mark指向链表中第一个节点next值大于等于x的节点。后面链表节点值小于x的节点需要插入到mark节点之后。

代码一:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def partition(self, head: ListNode, x: int) -> ListNode:
        if head == None or head.next == None:
            return head
        head1 = ListNode(0)
        head1.next = head
        mark = head1
        while mark.next and mark.next.val<x:
            mark = mark.next
        if mark.next == None:
            return head1.next
        if mark.next.next:
            pre = mark.next
            cur = mark.next.next
            nex = cur.next
            while cur:
                while cur and cur.val>=x:
                    pre = pre.next
                    cur = cur.next
                    if nex == None:
                        return head1.next
                    nex = cur.next                            
                cur.next = mark.next
                mark.next = cur
                pre.next = nex
                mark = cur
                cur = nex
                if nex == None:
                    return head1.next
                else:
                    nex = nex.next                       
        else:
            return head1.next
        return head1.next

思路二:

定义两个头结点,一个存储值小于x值的节点,一个存储值大于x值的节点。最后让lesshead的尾节点指向morehead的头结点即可。

代码二:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def partition(self, head, x):
        """
        :type head: ListNode
        :type x: int
        :rtype: ListNode
        """
        if not head or not head.next:
            return head
        cur = head
        lesshead,morehead = ListNode(0),ListNode(0)
        p,q = lesshead,morehead
        while cur:
            if cur.val<x:
                p.next = cur
                p = p.next
            else:
                q.next = cur
                q = q.next
            cur = cur.next
            p.next = morehead.next
            q.next = None
        return lesshead.next

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值