单链表的分割
将一个单链表以某个元素基准分割为两个链表
提示:
1输入若干数值创建一一个单链表(-1表示结束)
2输出该初始单链表
3输入一一个基准值X
4分割为两个单链表(一个单链表的元素值均小于基准,另一个单链表的元素值均大于等于基准)
5输出分割后的两个链表
供参考:
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LinkNode;
void InitList(LinkNode **L)
{
(*L) = (LinkNode *)malloc(sizeof(LinkNode));
(*L)->next = NULL;
}
void CreateList(LinkNode *L)
{
LinkNode *p = L,*pt = NULL;
ElemType x;
printf("输入若干数值创建一个单链表(-1表示结束):");
while(1){
scanf("%d", &x);
if (x == -1) break;
pt = (LinkNode *)malloc(sizeof(LinkNode));
pt->next = NULL;
pt->data = x;
p->next = pt;
p = pt;
}
}
void DispList(LinkNode *L)
{
LinkNode *p = L->next;
while(p != NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
void Split1(LinkNode *L1, LinkNode *L2)
{
ElemType x;
LinkNode *pL1 = L1,*pnL1 = L1->next,*pL2 = L2,*pL = NULL;
printf("输入一个基准值x:");
scanf("%d", &x);
while(pnL1 != NULL){
pL = pnL1;
pnL1 = pnL1->next;
pL->next = NULL;
if(pL->data < x){
pL1->next = pL; //链表 L1 ,元素值 < 基准值
pL1 = pL;
}
else{
pL2->next = pL; //链表 L2 ,元素值 >= 基准值
pL2 = pL;
}
}
}
int main()
{
LinkNode *L1,*L2;
InitList(&L1);
InitList(&L2);
CreateList(L1);
DispList(L1);
Split1(L1, L2);
DispList(L1);
DispList(L2);
return 0;
}
参考GPT和自己的思路:
好的,针对您提出的问题,我可以给出一个解答。
如何做好单链表的分割?
综上所述,做好单链表的分割需要先创建好链表,然后根据基准值来划分链表,最后输出分割后的两个链表。希望我的答案能对您有所帮助。
首先遍历链表找到分割的位置,把分割前的节点next指针指向空。分割处的节点用新的head指针保存