题目:链表划分
样例:
给定1->4->3->2->5->2->null,并且x=3。
返回1->2->2->4->3->5->null。
思路:设置两个新链表small和big,遍历原始链表,小于x的元素放在small里,大于x的元素放在big里,然后big连在small后面返回。
代码:
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param x: an integer
* @return: a ListNode
*/
ListNode *partition(ListNode *head, int x) {
// write your code here
if(head==NULL)
return NULL;
ListNode *small=new ListNode(0);
ListNode *big=new ListNode(0);
ListNode *p=small;
ListNode *q=big;
while(head!=NULL)
{
if(head->val<x)
{
p->next=head;
p=p->next;
}
else
{
q->next=head;
q=q->next;
}
head=head->next;
}
q->next=NULL;
p->next=big->next;
return small->next;
}
};
感想:一开始没有令q->next=NULL,运行总是显示内存不够,空间复杂度超标,调了好多地方才找到。