给你一个链表头结点head和一个特定值x;请你对链表进行分割,使得所有小于x的节点都出现在大于或者等于x的结点之前。
并且,保留两个分区中每个节点的初始相对位置。
即:在一个链表中,把所有小于x的术都放到X的前面,大于或者等于的放在后面,并且各节点之间的顺序不乱。
思路:1、创建链表。
2、遍历列表,分别让各个节点与x节点比较。大于或等于x的节点值与接下来第一个小于x的节点值互换。
3、记录第一次和最后一次节点的位置。当再次寻找时无法找到符合条件节点,此时把大于x的节点插入到小于x的节点后面。
#include"stdio.h"
#include"stdlib.h"
typedef struct Arr
{
int num;
struct Arr*next;
}A;
A *New()
{
A*temp = (A*)malloc(sizeof(A));
if (NULL == temp)
{
printf("空间申请失败!\n");
exit(0);
}
temp->num = 0;
temp->next = NULL;
return temp;
}
void charu(A*temp, int num)
{
A*temp1 = Ne