设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。

void Divid_Link_Liist(LinkList &L1, LinkList &L2, LinkList &L3)
{
	/*
		function:将链表L1按元素的正负分为L2和L3两个链表
		参数说明:L1为待分解的链表,L2为负数构成的链表的头结点,L3为正数构成的链表的头结点
	*/
	LNode *p1, *p2, *p3;

	p1 = L1->next;
	p2 = L2;
	p3 = L3;
	while(p1)
	{
		if(p1->data < 0)
		{
			p2->next = p1;
			p2 = p2->next;
		}
		else if(p1->data > 0)
		{
			p3->next = p1;
			p3 = p3->next;
		}
		p1 = p1->next;
	}

    //L2和L3链表最后一个结点指向NULL
	p2->next = NULL;
	p3->next = NULL;
}

 测试结:

设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。_第1张图片

你可能感兴趣的:(数据结构基础)