题目:
Given a linked list and a value x, partition it such that all nodes less than x 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
.
分析:
建立两个listnode,一个是左边,一个是右边,然后按顺序在左边和右边分别添加即可。对我而言还是对于结构指针的使用不是很熟。
代码:
/**
* 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 *res=new ListNode(0);
ListNode *resRight=new ListNode(0);
ListNode *left=res,*right=resRight;
while(head!=NULL){
if(head->val<x){
left->next = new ListNode(head->val);
left=left->next;
}
else{
right->next = new ListNode(head->val);
right=right->next;
}
head=head->next;
}
left->next=resRight->next;
return res->next;
}
};