用c语言实现数据结构算法将两个有序链表并为一个有序链表的算法,,数据结构 单链表 算法两个线性表,元素 按递减次序排列,存储结构为单链表,写出算法F将两个表归为一个表,这个表元素递增有序,并用缘来两个...

#include// 对于节点的定义

struct Node

{

int data;

struct Node *next;

};

// 合并两个递减有序的链表

struct Node *merge(struct Node *p1, struct Node *p2)

{

struct Node *head = NULL, *p = NULL, *pt;

// 当两链表均不空时的合并逻辑

while(p1 && p2)

{

// 将两链表当前节点中值较大的一个记录下来,

// 并后移指向该链表当前节点的指针

if(p1->data > p2->data)

{

pt = p1;

p1 = p1->next;

}

else

{

pt = p2;

p2 = p2->next;

}

if(p == NULL)

{

// 若当前新链表为空,将p和head指向找到的节点

head = p = pt;

}

else

{

// 将新节点链入当前链表尾部

p->next = pt;

p = pt;

}

}

// 找到隶完成合并的那个链表,将其链接到新链表的尾部

pt = p1 == NULL ? p2 : p1;

if(pt)

{

if(p == NULL)

{

// 如果新链表仍为空,直接指向非空的链表

head = p = pt;

}

else

{

// 将未完成合并的链表链接到新链表的尾部

p->next = pt;

}

}

return head;

}

// 链表倒置

struct Node *reverse(struct Node *head)

{

struct Node *newHead = NULL, *p;

if(!head)

{

return newHead;

}

// 先将新的头指针指向原链表的第一个节点

newHead = head;

head = head->next;

newHead->next = NULL;

// 将原链表中剩下的节点依次加到新链表的头部,以实现倒序

while(head)

{

p = head->next;

head->next = newHead;

newHead = head;

head = p;

}

return newHead;

}

int main()

{

struct Node *h1, *h2, *head;

// 生成原始的两个链表的逻辑请自行编写

// 首先,合并两个链表

head = merge(h1, h2);

// 然后,将合并后的链表倒置

head = reverse(head);

// 输出处理后的链表中的内容

while(head)

{

printf("%d ", head->data);

head = head->next;

}

getchar();

return 0;

}

以上程序是按照 zhangchaoyiay 所说的算法思路编写,其实在合并的过程中,可以直接完成倒序操作,这个楼主自己琢磨一下好了,呵呵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值