将链表以某个数为界进行partition ( LeetCode 86)

这个博客介绍了如何解决LeetCode上的第86题,即根据给定值x将链表分成两部分,一部分包含所有小于x的元素,另一部分包含所有大于或等于x的元素。通过定义两个临时指针并遍历链表,博主展示了如何实现这一分区操作,并提供了C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include"ListNode.h"

//把链表分为大于x和小于x的部分

class Solution{

public:
    ListNode* partitionList(ListNode* head, int x){
    //定义两个临时指针,两个临时节点用来保持索引
    ListNode a(0);
    ListNode b(0);

    ListNode* less = &a;
    ListNode* more = &b; 

    while(head){

        if(head->val < x ){
            
            less->next = head;
            less = less->next; // 或者  less = head;
        }else{
           
            more->next = head;
            more = more->next;  //或者   more = head;

         }    
            head = head->next;

    }

    //关键边界值
    //分成两个短链表之后
    // 将大数的表头拼接在小数的后面
    less->next = b.next;
    //将表尾置NULL
    more->next=NULL;
    
    return a.next; //返回表头指针

         
    }
};    



int main()
{
  ListNode a(8);
  ListNode b(9);
  ListNode c(1);
  ListNode d(2);
  ListNode e(3);
  ListNode f(2);
  a.next = &b;
  b.next = &c;
  c.next = &d;
  d.next = &e;
  e.next = &f;
  f.next = NULL;
  std::cout<<"the List has been generated!"<<std::endl;

  Solution solution;
  ListNode*   result =solution.partitionList(&a,3);
  while(result){
   std::cout<<"result: "<<result->val<<std::endl;
   result = result->next;
  }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值