m0_62138486 2022-09-22 21:46 采纳率: 98.6%
浏览 17
已结题

画圈的哪几部分是什么意思

img

img


#include <stdio.h>

typedef struct Node *Node;
struct Node
{
int data;
Node Next;
};
Node CList()
{
int d;
Node head = (Node)malloc(sizeof(struct Node)),q;
head -> Next = NULL;
q = head;
while(scanf("%d",&d)&&d!=-1)
{
Node p = (Node)malloc(sizeof(struct Node));
p -> data = d;
p -> Next = NULL;
q -> Next = p;
q = p;
}
return head;
}
Node Merge(Node a,Node b)
{
a = a -> Next;
b = b -> Next;
Node head = (Node)malloc(sizeof(struct Node));
head -> Next = NULL;
Node q = head;
while(a || b)
{
Node p = (Node)malloc(sizeof(struct Node));
p -> Next = NULL;
if(a == NULL || a -> data > b -> data)
{
p -> data = b -> data;
b = b -> Next;
q -> Next = p;
q = p;
}
else
{
p -> data = a -> data;
a = a -> Next;
q -> Next = p;
q = p;
}
}
return head;
}
void printL(Node a)
{
a = a -> Next;
if(a == NULL)printf("NULL");
int flag = 0;
while(a)
{
if(flag)printf(" %d",a -> data);
else printf("%d",a -> data);
a = a -> Next;
flag = 1;
}
}
int main()
{
Node a = CList();
Node b = CList();
Node c = Merge(a,b);
printL(c);
}

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-09-22 21:59
    关注

    第一个圈是因为链表是烧饼链表,所有有效节点从next开始
    while(a || b)是判断如果有一个链表已经到遍历完毕,则循环结束
    第三个圈中的if(a==NULL)是废话,因为while条件已经排除a为空的情况了。后半部分是判断a和b节点值的大小,进行排序

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题