题目描述
现有一链表的头指针 ListNode* pHead,给一定值x,
编写一段代码将所有小于x的结点排在其余结点之前,
且不能改变原来的数据顺序,返回重新排列后的链表的头指针
typedef struct ListNode {
int val;
struct ListNode* next;
}ListNode;
ListNode* partition(ListNode* pHead, int x) {
ListNode* cur = pHead;
ListNode* p1 = NULL;//第一个链表的头指针
ListNode* p2 = NULL;//第一个链表的尾指针
ListNode* p3 = NULL;
ListNode* p4 = NULL;
if (pHead == NULL)
{
return NULL;
}
while (cur)
{
if (cur->val < x)//小于x尾插插入第一个链表
{
//第一次尾插
if (p1 == NULL)
{
p1 = cur;
p2 = p1;
}
else
{
p2->next = cur;
p2 = p2->next;
}
}
else//大于等于x插入第二个链表
{
//第一次尾插
if (p3 == NULL)
{
p3 = cur;
p4 = p3;
}
else
{
p4->next = cur;
p4 = p4->next;
}
}
cur = cur->next;
}
//全部大于x
if (p1 == NULL)
{
return p3;
}
//全部小于x
else if (p3 == NULL)
{
return p1;
}
//链接两个链表
else
{
p2->next = p3;
p4->next = NULL;
}
return p1;
}