第二章 线性表
程序员文章站
2022-05-26 12:08:24
...
(5)设计算法将 一 个带头结点的单链表A 分解为两个具有相同结构的链表B 和C, 其中B
表的结点为 A 表中值小于零的结点,而 C 表的结点为 A 表中值大于零的结点(链表 A 中的元素
为非 零整数,要求 B 、 C 表利用 A 表的结点)。
/*
(5)设计算法将 一 个带头结点的单链表A 分解为两个具有相同结构的链表B 和C, 其中B
表的结点为 A 表中值小千零的结点,而 C 表的结点为 A 表中值大于零的结点(链表 A 中的元素
为非 零整数,要求 B 、 C 表利用 A 表的结点)。
*/
#include <stdio.h>
#include <iostream>
#define LENGTH 5
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
void CreatList_R(LinkList &L, int n)
{
L = new LNode;
L->next = NULL;
LNode *r = L;
for (int i = 0; i < n; i++)
{
LNode *p = new LNode;
printf("请输入第%d个结点data值:", i + 1);
std::cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void ShowList(LinkList L)
{
LNode *p = L->next;
while (p)
{
printf("%d\t", p->data);
p = p->next;
}
printf("\n");
}
void InitList(LinkList &L)
{
L = new LNode;
L->next = NULL;
}
void AimList(LinkList &L1, LinkList &LA, LinkList &LB)
{
LNode *aim = L1->next;
LNode *Ar = LA;
LNode *Br = LB;
while (aim)
{
if (aim->data < 0)
{
Ar->next = aim;
Ar = aim;
aim = aim->next;
}
else
{
Br->next = aim;
Br = aim;
aim = aim->next;
}
}
Ar->next = NULL;
Br->next = NULL;
delete L1;
}
int main(void)
{
LinkList L1, LA, LB;
InitList(LA);
InitList(LB);
CreatList_R(L1, LENGTH);
printf("L1: ");
ShowList(L1);
AimList(L1, LA, LB);
printf("LA: ");
ShowList(LA);
printf("LB: ");
ShowList(LB);
delete LA;
delete LB;
return 0;
}
运行结果:
如有错误,请告诉小茅芦。
上一篇: 使用java代码编写栈来实现综合计算器(中缀表达式)
下一篇: 你知道人参大枣的好处吗