题目:
实现一个函数将一个链表分为前后两部分,小于x的放前面,大于x的放后面
实现:
声明两个链表,一个存放小的,一个存放大的;
最后再将二者拼接
ListNode* partition(ListNode *pHead, int x) {
if (pHead == NULL || pHead->next == NULL) return pHead;
ListNode* s = new ListNode(0);
ListNode*s_head = s;//记录小于链表的虚拟头结点,用于返回
ListNode * l = new ListNode(0);
ListNode* l_head = l;//记录大于链表的虚拟头结点,用于拼接
for (ListNode * cur = pHead; cur != NULL; cur = cur->next) {
if (cur->val < x) {
s->next = cur;
s = s->next;
}
else {
l->next = cur;
l = l->next;
}
}
s->next = l_head->next;
return s_head->next;
}