巧用两个临时头结点,其实就是利用头结点保存起始位置,通过循环分别形成大于等于x和小于x的两个链表后,要将他们连接起来,用小于x的链表末端指针指向大于等于x链表的头结点的下一个,再将该链表末端置空就可以实现了。
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
//巧用临时头结点
ListNode less_head(0);
ListNode more_head(0);
ListNode* less_ptr = &less_head;
ListNode* more_ptr = &more_head;
while(head)
{
if(head->val<x)
{
less_ptr->next = head;//将less_head指向head
less_ptr = head;//less_head移动到当前的位置,即head
//保存less_head的头和尾
//保存more——head的头
}
else
{
more_ptr->next = head;
more_ptr = head;
}
head = head->next;
}
less_ptr->next = more_head.next;
more_ptr->next = NULL;
return less_ptr->next;
}
};