(十四)将单向链表按某值划分成左边小,右边大的形式

给定一个整数pivot,此博客介绍如何调整单链表,使得值小于pivot的节点位于左侧,等于pivot的居中,大于pivot的在右侧,并保持原有顺序。提出两种方法,包括通过数组辅助和仅使用指针操作。提供了C++实现代码及解题思路。
摘要由CSDN通过智能技术生成

【题目】给定一个单链表的头结点head,结点的值类型为整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分是值小于pivot的结点,中间是对于pivot的结点,右边是大于pivot的结点

【进阶要求】调整后所有大于等于小于pivot的结点之间的相对顺序和调整之前一样。时间复杂度O(N),空间复杂度O(1)

【解题思路】

  • 【法一:不能保证有序】把链表的结点都放入到数组中,再对数组进行处理
  • 【法二:可保证有序】利用六个指针,小于pivot的头指针和尾指针,等于pivot的头指针和尾指针,大于pivot的头指针和尾指针。依次对链表进行比较和分配,最后小于区域的尾指针连接等于区域的头指针;等于区域的尾指针连接大于区域的头指针。注意边界条件,可能没有大于pivot的数,或者没有等于、小于pivot的数

【C++】

Node* listPartition(Node* head,const int pivot){
   
    Node* sH = NULL;
    Node* sT = NULL;
    Node* eH = NULL;
    Node* eT = NULL;
    Node* mH = NULL;
    Node*
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值