题目理解起来有点费劲:使所有小于x的节点都位于大于或等于x的节点之前,意思是只需要小于等于x的节点位于链表前面即可,不要求小于在前,等于在中,大于在后。
采用双哑节点+双指针,先构建中间链表,然后将两个链表合并:
- 哑节点指向两个中间链表的头部
- 指针指向两个中间链表的尾部
代码如下:
// // Created by jt on 2020/9/24. // class Solution { public: /** * * @param head ListNode类 * @param x int整型 * @return ListNode类 */ ListNode* partition(ListNode* head, int x) { // write code here ListNode dummy1(0), dummy2(0); ListNode *p = &dummy1, *q = &dummy2; ListNode *r = head; while (r) { if (r->val < x) { p->next = r; p = r; } else { q->next = r; q = r; } r = r->next; } p->next = dummy2.next; q->next = nullptr; return dummy1.next; } };