#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LinkList;
void InitList(LinkList*& L)
{
L = (LinkList*)malloc(sizeof(LinkList));
L->next = NULL;
}
LinkList* createNode(ElemType data)
{
LinkList* newNode = (LinkList*)malloc(sizeof(LinkList));
if (newNode == NULL)
{
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void appendNode(LinkList*& head, ElemType data)
{
LinkList* newNode = createNode(data);
if (head->next == NULL)
{
head->next = newNode;
return;
}
LinkList* temp = head;
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
void PrintList(LinkList*& L)
{
LinkList* p = L;
printf("链表中的元素有:");
while (p->next != NULL)
{
printf("%d\t", p->next->data);
p = p->next;
}
printf("\n");
}
void DestroyList(LinkList*& L)
{
LinkList* pre = L, * p = L->next;
while (p != NULL)
{
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
void DevideL(LinkList*& L, int x)
{
if (L->next == NULL || L->next->next == NULL)
{
return;
}
LinkList* front=L->next;
LinkList* rear=L;
LinkList* temp1 = L->next;
LinkList* temp2;
while (temp1 != NULL)
{
if (temp1->data < x)
{
temp2 = temp1->next;
rear->next = temp1->next;
temp1->next = front;
front = temp1;
temp1 = temp2;
}
else
{
temp1 = temp1->next;
rear = rear->next;
}
}
L->next = front;
}
int main(int argc, char* argv[])
{
LinkList* L;
InitList(L);
appendNode(L, 3);
appendNode(L, 5);
appendNode(L, 4);
appendNode(L, 1);
appendNode(L, 2);
printf("分割前");
PrintList(L);
DevideL(L, 3);
printf("分割后");
PrintList(L);
DestroyList(L);
return 0;
}
