分割链表leetcode86

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

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

示例:svg

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

申请新空间作头结点方式

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode*less_pre=new ListNode(8);
        ListNode*more_pre=new ListNode(8);
        ListNode *l=less_pre;
        ListNode*m=more_pre;
        while(head)
        {  
            if(head->val<x)
        {
            less_pre->next=head;
            less_pre=head;
        }
         else
         {  more_pre->next=head;
            more_pre=head;   
         }
            head=head->next;          
        }
        less_pre->next=m->next;
        more_pre->next=NULL;
        return l->next;
        
    }
};

直接利用地址存储方式

class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode less_head(0);
        ListNode  more_head(0);
        ListNode*less_pre=&less_head;
        ListNode*more_pre=&more_head;
        while(head)
        {  
            if(head->val<x)
        {
            less_pre->next=head;
            less_pre=head;
        }
         else
         {  more_pre->next=head;
            more_pre=head;   
         }
            head=head->next;          
        }
        less_pre->next=more_head.next;
        more_pre->next=NULL;
        return less_head.next;
        
    }
};

本文分享 CSDN - 希境。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。.net

相关文章
相关标签/搜索