LeetCode---Partition List

题目大意:给出一个链表和一个基准元素,将该链表划分为两部分使得前部分元素都小于基准元素,后部分元素都大于或等于基准元素。

算法思想:

1.遍历链表,将小于基准元素的节点连接起来。同时将大于基准元素的节点连接起来。

2.最后将两部分链表连接起来返回。

3.需注意三种情况。(1)所有元素都小于基准元素(2)所有元素都大于基准元素(3)既存在小于基准元素,又存在大于基准元素。

代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if(head==NULL)  return NULL;
        ListNode *p=head,*left=NULL,*right=NULL,*lp=NULL,*rp=NULL;
        bool isLhead=true,isRhead=true;
        while(p!=NULL){
           if(p->val<x){
               if(isLhead){
                   isLhead=false;
                   left=p;
                   lp=p;
               }
               else{
                   lp->next=p;
                   lp=lp->next;
               }
           }
           else{
               if(isRhead){
                   isRhead=false;
                   right=p;
                   rp=p;
               }
               else{
                   rp->next=p;
                   rp=rp->next;
               }
           }
           p=p->next;
        }
        if(left!=NULL&&right==NULL)
        {
            lp->next=NULL;
            return left;
                
        }
        if(left==NULL&&right!=NULL){
            rp->next=NULL;
            return right;
        }
        lp->next=right;
        rp->next=NULL;
        return left;
       
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值