Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.
ListNode* partition(ListNode* head, int x) {
//本题的思路是采用两个链表,第一个链表保存数值小于x的节点,第二个链表保存数值大于x的节点,然后将两个链表连接起来即为最终的结果
if(NULL == head || NULL == head->next)
{
return head;
}
ListNode* lessXList = new ListNode(0); //注意指针的初始化采用new,如果采用ListNode lessXList = ListNode(0),对应的则只将ListNode看成了结构体
ListNode* lessXListHead = lessXList;
ListNode* greatXList = new ListNode(0);
ListNode* greatXListHead = greatXList;
while(head)
{
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
temp->val = head->val;
temp->next = NULL;
if(head->val < x)
{
lessXList->next = temp;
lessXList = temp;
}
else
{
greatXList->next = temp;
greatXList = temp;
}
head = head->next;
}
lessXList->next = greatXListHead->next;
return lessXListHead->next;
}