分隔链表

要求:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。

[https://leetcode-cn.com/problems/partition-list/](LeetCode 86)

//方法: 利用建立两个头指针

class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if(head==NULL)
return NULL;

    ListNode* less_head=new ListNode(0);//less_head->val=0;less_head->next=NULL;
    ListNode* more_head=new ListNode(0);
    ListNode* pLessTail=less_head;
    ListNode* pMoreTail=more_head;
    
    while(head){
        if(head->val<x){
            pLessTail->next=head;//if val<x; link Less_X;
            pLessTail=head;//后移
        }
        else if(head->val>=x){
            pMoreTail->next=head;//if val>=x; link More_X;
            pMoreTail=head;//后移
            }
        head=head->next;  
    }
    pMoreTail->next=NULL;//尾置空
    pLessTail->next=more_head->next;//Less_X link More_X
    return less_head->next;//less头节点为空
}

};

posted @ 2020-11-05 15:04  Colin_Code  阅读(60)  评论(0)    收藏  举报