算法思想:
要想将单链表L按照奇偶序号分割为两个单链表A(奇),B(偶),我们便可以定义一个变量来记录当前遍历的结点序号的奇偶,两个指针 ra,rb,ra负责将奇数位置结点赋到A中,rb同理
核心代码:
void devide(LinkList L,LinkList A,LinkList B)
{
int index=1;
LNode*p=L->next;
LNode*ra=A;
LNode*rb=B;
while(p!=NULL)
{
if(index%2!=0)
{
ra->next=p;
ra=p;
}
else{
rb->next=p;
rb=p;
}
index++;
p=p->next;
}
ra->next=NULL;
rb->next=NULL;
}
可运行的完整代码示例:
#include"stdio.h"
#include"stdlib.h"
typedef struct LNode
{
int data;
struct LNode*next;
}LNode,*LinkList;
void wei_insert(LinkList L)
{
int x;
printf("请输入链表中的元素:");
scanf("%d",&x);
LNode*r=L;
while(x!=-1){
LNode*s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
}
void devide(LinkList L,LinkList A,LinkList B)
{
int index=1;
LNode*p=L->next;
LNode*ra=A;
LNode*rb=B;
while(p!=NULL)
{
if(index%2!=0)
{
ra->next=p;
ra=p;
}
else{
rb->next=p;
rb=p;
}
index++;
p=p->next;
}
ra->next=NULL;
rb->next=NULL;
}
void print_list(LinkList L){
LNode*p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void free_list(LinkList L)
{
LNode*p=L->next;
while(p!=NULL){
LNode*q=p;
p=p->next;
free(q);
}
free(L);
}
int main()
{
LinkList L=(LinkList)malloc(sizeof(LNode));
LinkList A=(LinkList)malloc(sizeof(LNode));
LinkList B=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
A->next=NULL;
B->next=NULL;
wei_insert(L);
devide(L,A,B);
printf("分离后的奇序号A中的元素:");
print_list(A);
printf("分离后的奇序号B中的元素:");
print_list(B);
free_list(A);
free_list(B);
free_list(L);
}
标签:奇偶,单链,LNode,NULL,next,LinkList,ra,rb,C语言
From: https://blog.csdn.net/m0_74181956/article/details/143165774