给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例2:
输入:head = [2,1], x = 2
输出:[1,2]
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* partition(ListNode* head, int x) { ListNode less_head; //设置俩个临时头结点 ListNode more_head; ListNode *less_ptr = &less_head; //对应指针指向这俩个头结点 ListNode *more_ptr = &more_head; while(head) { if(head->val < x){ less_ptr->next = head; //先链接 less_ptr = head; //将less_ptr后移 } else{ more_ptr->next = head; more_ptr =head; } head = head->next; } less_ptr->next = more_head.next; //指向more_Head下一个结点 more_ptr->next = NULL; return less_head.next; //less_ptr作为新链表头结点返回 } };