匿名者ckl 2019-01-03 23:50 采纳率: 33.3%
浏览 1780

怎么合并链表????

两个非降序链表的并集,例如将链表1->2->3 和 2->3->5 并为 1->2->3->5,只能输出结果,不能修改两个链表的数据。

#include
#include
typedef int DataType;
typedef struct node
{
DataType data;
struct node *next;
}*LinkList, *pNode;
LinkList GetEmptyList()
{
LinkList head = (pNode)malloc(sizeof(struct node));
head->data = 0;
head->next = 0;
return head;
}
int AddNode(LinkList head, DataType data)
{
pNode newnode,p = head;
while(p->next) {
if(p->next->data == data) return 0;
if(p->next->data > data) {
newnode = (pNode)malloc(sizeof(struct node));
newnode->data = data;
newnode->next = p->next;
p->next = newnode;
return 1;
}
p = p->next;
}
p->next = (pNode)malloc(sizeof(struct node));
p->next->data = data;
p->next->next = 0;
return 1;
}

LinkList MergeList(LinkList LA, LinkList LB) { // 合并LA、LB到新表
LinkList head;
pNode p,q,t;
int flag;
head = p = GetEmptyList();
for(q = LA->next; q; q = q->next) {
p->next = (pNode)malloc(sizeof(struct node));
p->next->data = q->data;
p = p->next;
}
p->next = 0;

for(p = LB->next; p; p = p->next) { // 合并
    flag = 1;
    for(q = head; q->next && flag; q = q->next) {
        if(p->data == q->next->data) flag = 0;
        else if(p->data < q->next->data) {
            t = (pNode)malloc(sizeof(struct node));
            t->data = p->data;
            t->next = q->next;
            q->next = t;
            flag = 0;
        }
    }
    if(flag) {
        q->next = (pNode)malloc(sizeof(struct node));
        q->next->data = p->data;
        q->next->next = 0;
    }
}
return head;

}
void Show(LinkList head) {
pNode p = head->next;
while(p) {
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int main()
{
DataType x;
LinkList LA = GetEmptyList();
LinkList LB = GetEmptyList();
LinkList LC;
printf("");
while(scanf("%d",&x) == 1)
{
AddNode(LA,x);
AddNode(LB,x);
printf("");
}

LC = MergeList(LA,LB);
Show(LC);
return 0; 

}

怎么好像不可以,怎么优化一下?

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-01-04 00:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)