c语言链表拆分,P2 拆分链表

## 将一个链表A拆分成两个,序号是奇数留在链表A中,序号是偶数保存在链表B中

```

#include

#include

//将一个链表拆分成两个,奇数留在链表A中,偶数保存在链表B中

typedef struct LNode{

int data;

struct LNode *next;

}LNode,*LinkList;

LinkList List_HeadInsert(LinkList &L);

LinkList DisCreat(LinkList &A);

void printLinkList(LinkList &L);

int main(){

LinkList A,B;

// LNode *p,*q;

A = List_HeadInsert(A);

printf("拆分前的链表A:");

printLinkList(A);

printf("\n");

B = DisCreat(A);

printf("拆分后的链表A:");

printLinkList(A);

printf("\n");

printf("拆分后的链表B:");

printLinkList(B);

}

LinkList DisCreat(LinkList &A){

//将表A中结点按序号的奇偶性分解到表A和表B中

LinkList B;

int i=0; //记录A中的结点序号

B=(LinkList)malloc(sizeof(LNode)) ; //创建B表表头

B->next=NULL; //B表的初始化

LNode *ra=A,*rb=B,*p;

p=A->next; //p为链表工作指针,指向带分解点

A->next=NULL;

while(p){

i++;

if(i%2==0) {

//序号为偶数

rb->next=p;

rb=p;

}else{

//序号为奇数

ra->next=p;

ra=p;

}

p=p->next;

}

ra->next=NULL;

rb->next=NULL;

return B;

}

LinkList List_HeadInsert(LinkList &L){

//头插法创建单链表

LNode *s;

int x;

L=(LinkList)malloc(sizeof(LNode)); //创建头结点

L->next=NULL;

scanf("%d",&x);

while(x!=-1){

s=(LNode*)malloc(sizeof(LNode));

s->data=x;

s->next=L->next;

L->next=s;

scanf("%d",&x);

}

return L;

}

void printLinkList(LinkList &L) {

LNode *p;

p=L->next;

while(p!=NULL){

printf("%d ",p->data);

p=p->next;

}

}

```

![](https://img.kancloud.cn/d4/c3/d4c32ff36ea890a7390cab6cb6a30273_771x267.png)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值