/**
* 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) {
//创建两个节点,用于保存小于x的值以及大于等于x的值
ListNode *before=new ListNode(0);//之前的错误是没有在这里进行初始化操作,导致野指针
ListNode *after=new ListNode(0);
//创建两个指针指向新节点
ListNode *p1=before;
ListNode *p2=after;
if(!head)
{
return head;
}
//遍历链表,<x的值在before前面,反之则在后面
while(head)
{
//比较当前头结点的值与x的关系
if(head->val<x)
{
p1->next=head;
head=head->next;
p1=p1->next;
}
else
{
p2->next=head;
head=head->next;
p2=p2->next;
}
}
p2->next=NULL;
p1->next=after->next;
return before->next;
}
};
LeetCode:86.分隔链表:这种类型的习题需要设置头结点,并必须将头结点初始化
最新推荐文章于 2022-01-25 13:14:56 发布
本文详细解析了一种链表分区算法,该算法将链表中小于特定值x的元素置于大于或等于x的元素之前,通过创建两个临时链表分别存放满足条件的节点,最后合并这两个链表来实现。文章提供了完整的C++代码实现。
5万+

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



