博客
关于我
单链表按序号奇偶分链表
阅读量:281 次
发布时间:2019-03-01

本文共 1524 字,大约阅读时间需要 5 分钟。

单链表按序号奇偶分割成两个子链表的实现

本文将介绍如何将一个带头结点的单链表按照序号的奇偶性分割成两个子链表headAheadB,并保持原有节点的顺序不变。

代码分析与实现

1. 创建链表

首先,我们需要创建一个链表。以下是创建链表的关键代码:

LinkList* CreaList() {
LinkList* head, *r, *s;
head = (struct LinkList*)malloc(sizeof(struct LinkList));
r = head;
int x;
scanf("%d", &x);
while (x != -100) {
s = (struct LinkList*)malloc(sizeof(struct LinkList));
s->data = x;
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
return head;
}

2. 链表分割

接下来,我们需要将链表按照序号的奇偶性分割成两个子链表headAheadB。以下是实现代码:

LinkList* Selet(LinkList* head) {
LinkList* r, *s, *cur;
int i = 0;
LinkList* headB = (struct LinkList*)malloc(sizeof(struct LinkList));
r = head;
s = headB;
cur = head->next;
r->next = NULL;
while (cur != NULL) {
i++;
if (i % 2 != 0) {
r->next = cur;
r = cur;
} else {
s->next = cur;
s = cur;
}
cur = cur->next;
}
r->next = NULL;
s->next = NULL;
return headB;
}

3. 打印链表

最后,我们需要打印链表。以下是打印函数:

void PrintList(LinkList* head) {
LinkList* p = head;
p = p->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}

主函数实现

int main() {
LinkList* head, *headA, *headB;
head = CreaList();
PrintList(head);
headB = Selet(head);
PrintList(head);
PrintList(headB);
return 0;
}

总结

通过以上实现,我们可以轻松地将一个带头结点的单链表按照序号的奇偶性分割成两个子链表headAheadB,并保持原有节点的顺序不变。

转载地址:http://ijho.baihongyu.com/

你可能感兴趣的文章
on_member_join 和删除不起作用.如何让它发挥作用?
查看>>
oobbs开发手记
查看>>
OOM怎么办,教你生成dump文件以及查看(IT枫斗者)
查看>>
OOP
查看>>
OOP之单例模式
查看>>
OOP向AOP思想的延伸
查看>>
OO第一次blog
查看>>
OO第四次博客作业
查看>>
OO面向对象编程:第三单元总结
查看>>
Opacity多浏览器透明度兼容处理
查看>>
OPC在工控上位机中的应用
查看>>
OPEN CASCADE Curve Continuity
查看>>
Open Graph Protocol(开放内容协议)
查看>>
Open vSwitch实验常用命令
查看>>
Open WebUI 忘了登入密码怎么办?
查看>>
open***负载均衡高可用多种方案实战讲解02(老男孩主讲)
查看>>
Open-E DSS V7 应用系列之五 构建软件NAS
查看>>
Open-Sora代码详细解读(1):解读DiT结构
查看>>
Open-Sora代码详细解读(2):时空3D VAE
查看>>
Open-Source Service Discovery
查看>>