一、链表分割
题目链接:链表分割
题目描述如下:

本题基于 C++ 类实现,代码编写位置遵循题目提示。
题目要求将链表分割,值小于 x 的节点放在左边,大于等于 x 的节点放在右边。方法类似双指针算法。我们可以创建两个新链表,分别存放比 x 小的节点和比 x 大或相等的节点,最后连接。
为避免空链表判断繁琐,使用哨兵节点占位,无需判断链表是否为空。
解题思路:创建大小链表及哨兵位,遍历原链表分配节点,连接首尾。
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
ListNode* lesshead, *lesstail;
ListNode* greaterhead, *greatertail;
lesshead = lesstail = (ListNode*)malloc(sizeof(ListNode));
greaterhead = greatertail = (ListNode*)malloc(sizeof(ListNode));
ListNode* pcur = pHead;
while(pcur) {
if(pcur->val < x) {
lesstail->next = pcur;
lesstail = pcur;
} else {
greatertail->next = pcur;
greatertail = pcur;
}
pcur = pcur->next;
}
lesstail->next = greaterhead->next;
greatertail->next = NULL;
ListNode* ret = lesshead->next;
(lesshead);
(greaterhead);
lesshead = ;
greaterhead = ;
ret;
}
};






