leetcode 86. 分隔链表 medium
题目描述:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
解题思路:
造两个头节点,less_head 和more_head,最后别忘了more_ptr的处理(把它的next设为nullptr,这个很容易忘!!!)
代码:
/**
* 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) {
if(!head)
return nullptr;
ListNode less_head(0);
ListNode more_head(0);
ListNode *less_ptr=&less_head,*more_ptr=&more_head;
while(head){
if(head->val<x){
less_ptr->next=head;
less_ptr=less_ptr->next;
} else{
more_ptr->next=head;
more_ptr=more_ptr->next;
}
head=head->next;
}
less_ptr->next=more_head.next;
more_ptr->next=nullptr; //more—ptr的处理别忘了
return less_head.next;
}
};
本文详细解析了LeetCode上第86题“分隔链表”的算法实现,通过创建两个虚拟头节点,分别用于保存小于特定值x的节点和大于等于x的节点,最终将两部分链表合并,确保了所有小于x的节点都在大于或等于x的节点之前,同时保持了两个分区中每个节点的初始相对位置。
193

被折叠的 条评论
为什么被折叠?



