链表的分割
1°题目链接
2°思路
思路1:
小于x头插
大于x尾插
难度高
思路2:
小于x的值放到less链表里
大于x的值放到greater链表里
最后把less和greater连接起来接下来我们实现思路2
3°实现
struct ListNode* partition(struct ListNode* pHead, int x)
{
struct ListNode* cur = pHead,*lessHead,*lessTail,*greaterHead,*greaterTail;
lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));
lessTail->next = NULL;
greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));
greaterTail->next = NULL;
while (cur)
{
if (cur->val < x)
{
lessTail->next = cur;
lessTail = lessTail->next;
}
else
{
greaterTail->next = cur;
greaterTail = greaterTail->next;
}
cur = cur->next;
}
lessTail->next = greaterHead->next;
//细节
//greaterTail->next会指向一个数 导致链表回接 需要制空
greaterTail->next = NULL;
//struct ListNode* list = lessHead; error
struct ListNode* list = lessHead->next;
free(lessHead);
free(greaterHead);
return list;
}
4°运行结果
#11链表的分割#完