分割鏈表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

相關文章
相關標籤/搜索