1 题目描述
给出一个链表和一个值 x,以 x为参照将链表划分成两部分,使所有小于 x的节点都位于大于或等于 x的节点之前。
两个部分之内的节点之间要保持的原始相对顺序。
例如:
给出 1→4→3→2→5→2和 x=3,
返回 1→2→2→4→3→5.
2 解题思路
- 新建两个节点lt_x与gtet_x,分别为指向两个链表的头结点。
- 把节点值小于x的节点链接到链表lt_x上,节点值大等于x的节点链接到链表gtet_x上。
- 最后把两个链表相连即可
3 代码实现
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
// define 2 new linked lists
ListNode* lt_x = new ListNode(-1);
ListNode* gtet_x = new ListNode(-1);
// get head nodes of these 3 linked lists
ListNode* cur_node = head;
ListNode* lt_x_cur_node = lt_x;
ListNode* gtet_x_cur_node = gtet_x;
while(cur_node != NULL){
if(cur_node->val < x){
lt_x_cur_node->next = cur_node;
lt_x_cur_node = lt_x_cur_node->next;
}
else{
gtet_x_cur_node->next = cur_node;
gtet_x_cur_node = gtet_x_cur_node->next;
}
cur_node = cur_node->next;
}
lt_x_cur_node->next = gtet_x->next;
gtet_x_cur_node->next = NULL;
return lt_x->next;
}
};
4 运行结果
运行时间:3ms
占用内存:412k