LeetCode Partition List

来源:互联网 发布:淘宝客户端for mac 编辑:程序博客网 时间:2024/06/04 18:03

题目

Given a linked list and a value x, partition it such that all nodes less thanx come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

 

在链表中实现partition

 

代码:

/** * 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) {ListNode *pos=head,*last_pos=NULL,*end=head,*last_end=NULL,*last_head=head;//当前处理位置,之前的位置;当前小于值序列的超尾,之前的位置;保留之前的头head=NULL;while(pos!=NULL){if(pos->val<x)//元素小于划分值{if(pos==end)//之前元素都小于划分值{if(last_pos==NULL)//没有确定头的位置head=pos;last_pos=pos;pos=pos->next;last_end=end;end=end->next;}else if(head==NULL)//之前有大于划分值的元素{head=pos;last_pos->next=pos->next;pos->next=end;last_end=pos;pos=last_pos->next;}else//普通情况,将该元素移至小于划分值的序列的微部{last_end->next=pos;last_pos->next=pos->next;pos->next=end;last_end=pos;pos=last_pos->next;}}else//元素大于等于划分值{last_pos=pos;pos=pos->next;}}if(head==NULL)//所有元素都大于划分值return last_head;return head;    }};


 

 

 

 

 

0 0