牛客网地址:链表分割_牛客题霸_牛客网
题目描述:现有一链表的头指针 ListNode* pHead,给一个值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
如果该链表为:8->3->7->9->2->1->5->4 【x=5】
则重新排列后应为:3->2->1->5->4->8->7->9
greater为大于部分, less为小于部分
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
// write code here
ListNode *greater,*gtail,*less,*ltail;
greater=gtail=(ListNode*)malloc(sizeof(ListNode));
less=ltail=(ListNode*)malloc(sizeof(ListNode));
while(pHead!=NULL) //分割为两个链表
{
if(pHead->val>=x)
{
gtail->next=pHead;
gtail=gtail->next;
}
else
{
ltail->next=pHead;
ltail=ltail->next;
}
pHead=pHead->next;
}
//将两个链表串起来
ltail->next=greater->next;
gtail->next=NULL;
pHead=less->next;
free(greater);
free(less);
return pHead;
}
};