C语言 两个递增单链表归并为一个递减单链表的实现与思路
思路
两个递增单链表L,P从头开始进行节点比较,较小
的节点摘下来,放到Q链表里,Q链表用头插法
建立单链表,已形成递减单链表如图
第一次1,2 进行比较,1比较小,进而把1节点摘下来,放到Q里
如果对你有帮助,点个赞呗
第二次2,3 进行比较,2,比较小,进而把2节点摘下来,放到Q里
.
.
.
.
实现代码
结构体
typedef struct SqNode {
int data;
struct SqNode * Next;
}SqNode,*SqList;
功能函数
SqList MergerList(SqNode* L, SqNode* P)
{
/*
参数:两个链表的首地址
函数功能:合并两个递增有序的单链表(带头节点),归并成一个递减有序单链表(带头结点)
*/
SqList s;
SqList p;
SqList Down;//承接两个链表,形成递减列表
SqList q;
s = L;
p = P;
Down = (SqList)malloc(sizeof(SqNode));
Down->Next = NULL;
while (s->Next != NULL && p->Next != NULL)
{
if (s->Next->data < p->Next->data)//进行比较节点的大小
{
q = s->Next;
s->Next = s->Next->Next;
q->Next = Down->Next;//进行头插法
Down->Next = q;
}
else
{
q = p->Next;
p->Next = p->Next->Next;
q->Next = Down->Next;
Down->Next = q;
}
}
while (s->Next != NULL)//当p链表比较完毕之后,把s链表全部插入q链表指
{
q = s->Next;
s->Next = s->Next->Next;
q->Next = Down->Next;
Down->Next = q;
}
while (p->Next != NULL)//当s链表比较完毕之后,把p链表全部插入q链表指
{
q = p->Next;
p->Next = p->Next->Next;
q->Next = Down->Next;
Down->Next = q;
}
return Down;
}