LintCode : 链表划分
题目
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
思路
创建新链表,将小于x和大于等于x的值分别插入新链表。
代码
ListNode *partition(ListNode *head, int x)
{
if(head == NULL)
return head;
ListNode *ans = (ListNode *)malloc(sizeof(ListNode));
ListNode *t = ans;
for(ListNode *p = head; p != NULL; p = p->next)
{
if(p->val < x)
{
ListNode *temp = new ListNode(p->val);
t->next = temp;
t = t->next;
}
}
for(ListNode *p = head; p != NULL; p = p->next)
{
if(p->val >= x)
{
ListNode *temp = new ListNode(p->val);
t->next = temp;
t = t->next;
}
}
return ans->next;
}