目录
一、问题描述
oj链接:链表分割_牛客题霸_牛客网 (nowcoder.com)
二、 思路
新建两个链表,把小于x的尾插到其中一个链表,大于等于x的尾插到另一个链表,然后把这两个链表链接起来。注意我们新建的两个链表最好用带哨兵位的头结点的链表,这样可以避免我们在尾插时需要对空单独分析的问题。
三、代码
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
// write code here
struct ListNode* lesshead = NULL,*lesstail= NULL;
struct ListNode* greaterhead = NULL,*greatertail= NULL;
struct ListNode* cur = pHead;
lesshead = lesstail = (struct ListNode*)malloc(sizeof(struct ListNode));
greaterhead = greatertail= (struct ListNode*)malloc(sizeof(struct ListNode));
while(cur)
{
if(cur->val<x)
{
lesstail->next = cur;
lesstail=lesstail->next;
}
else
{
greatertail->next = cur;
greatertail=greatertail->next;
}
cur = cur->next;
}
greatertail->next=NULL;
lesstail->next = greaterhead->next;
free(greaterhead);
struct ListNode* p = lesshead->next;
free(lesshead);
return p;
}
};