86. 分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5 思路:将小于 x 和大于 x 的部分分别存储,最后连起来。 代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* partition(ListNode* head, int x) { ListNode *mirror, *mirror1, *small, *large; mirror = new ListNode(0); mirror1 = new ListNode(-1); small = mirror; large = mirror1; while(head) { if(head->val<x) { small->next = head; small = small->next; head = head->next; } else { large->next = head; large = large->next; head = head->next; } } large->next = NULL; small->next = mirror1->next; return mirror->next; } };