CM11 链表分割
题目链接:链表分割_牛客题霸_牛客网
题目描述:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition
{
public:
ListNode* partition(ListNode* pHead, int x)
{
//创建一个小链表一个大链表
ListNode* lessHead,* lessTail;
lessHead = lessTail = (ListNode*)malloc(sizeof(ListNode));
ListNode* greaterHead,* greaterTail;
greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));
//遍历链表
ListNode* pur = pHead;
while (pur)
{
//小于指定值,尾插进小链表
if (pur->val < x)
{
lessTail->next = pur;
lessTail = lessTail->next;
pur = pur->next;
}
//大于等于指定值,尾插进大链表
else
{
greaterTail->next = pur;
greaterTail = greaterTail->next;
pur = pur->next;
}
}
greaterTail->next = NULL;
//连接并处理大小链表
lessTail->next = greaterHead->next;
ListNode* ret = lessHead->next;
free(lessHead);
free(greaterHead);
lessHead = NULL;
greaterHead = NULL;
return ret;
}
};
解题思路:
- 新建一个大链表,一个小链表
- 开始遍历原链表,将小于x的值尾插进小链表,将大于等于x的值尾插进大链表
- 最后将小链表的为节点和大链表的头结点连接,最后将大链表的尾结点置为NULL
9656

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



