编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。 设置两个链表头,遍历原链表,一个追加小数链表,一个追加大数链表,最后将小数链表粘到大数链表前边即为结果。 class Partition { public : ListNode* partition(ListNode* head, int x) { if (head == nullptr){ return nullptr; } //if ListNode *smallList = new ListNode(-1); ListNode *bigList = new ListNode(-1); // 因为链表没有头结点,所以自己生成的头结点,-1没任何意义,头结点->next返回第一个节点 ListNode *ps = smallList,*pb = bigList,*cur = head; while (cur){ if (cur->val < x){ ps->next = cur; ps = cur; } //if else { pb->next = cur; pb = cur; } //else cur = cur->next; } //while pb->next = nullptr; ps->next = bigList->next; return smallList->next; }
}; |
|
来自: 雪柳花明 > 《C 笔试 算法题准备》