【问题描述】
设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B和C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求 B、表利用A表的结点)。
【参考代码】
typedef struct LNode
{
int data;
struct LNode* next;
}LNode, * LinkList;
void findList(LinkList &La, LinkList &Lb, LinkList &Lc)
{
LinkList pa, pb, pc, p;
pa = La->next;
pb = Lb = La; //尾插法
pc = Lc = La; //尾插法
while (pa)
{
if (pa->data > 0)
{
pc->next = pa;
pc = pa;
}
else if (pa->data < 0)
{
pb->next = pa;
pb = pa;
}
pa = pa->next;
}
pb->next = NULL;
pc->next = NULL;
}
【代码讲解】
本代码针对考研数据结构,采用伪代码,主要理解代码逻辑,
该问题比较简单,注意采用的是头插法还是尾插法实现,两者有较大差异。