链表c语言
将链表B接到链表A之后,不用排序,两个链表输入0就停止读入数据,我网上找了很久,都没找到靠谱一点的答案!!!求解,下面是参考的代码#include<stdio.h>
#include<malloc.h>
void print(char *Info, struct student *Head);
int main(void)
{
struct student *ah, *bh;
printf("创建链表A,请输入学号及成绩(均输入为0时表示停止):\n");
ah = creat();
printf("\n创建链表B,请输入学号及成绩(均输入为0时表示停止):\n");
bh = creat();
print(ah);
print(bh);
ah = merge(ah, bh);
print("\n链表A、B合并后:", ah);
return 0;
}
void print(char *Info, struct student *Head)
{
printf("%s", Info);
while (Head != NULL)
{
printf("%d,%d", Head->num, Head->score);
Head = Head->next;
}
}
creat();
merge(ah, bh);
print(student&);
这三个方法,如何定义的?
能否发来一看?我是初学者,我有兴趣 ah = merge(ah, bh);
可不可以理解为:
ah 增加后续长度(bh) && 深复制 bh到后续长度 && 释放 bh howzyao 发表于 2020-4-4 11:12
ah = merge(ah, bh);
可不可以理解为:
ah 增加后续长度(bh) && 深复制 bh到后续长度 && 释放 bh
代码不完整,应该是定义结构体和函数原型
结构体是
struct Link
{
int data;
struct Link*next
};
struct Link*merge();
struct Link* creat() 看到了Link结构,从字面上看来,是不是这样:
当学生0存入时,一定是:(迭代时:)
*next==NULL
所以,写入data后,(需要将学生0的Link*current=001,同时将此学生的Link*next=NULL);
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
按已知的 Link结构 和 应该是定义结构体和函数原型 结合思考,得出如下:
这里假设:要写入学生10人:(i==11时,for结束)
第1人时:
必然发现 *next!=NULL,存入data后,同时需要将当前学生标记为 next==i;//即i==1;
此时,只有一个条件:若next==NULL时;此只能是当前学生为最后一名学生,所以,必然地,
需要增加条件:当data!=-1时,说明当前学生还没有录入;
代码如下:
if(data>0 && next==NULL)时,学生是有效的data>=1时,自然next!=NULL;
它需要指向非NULL;所以改为:
if(data>0)时,这是当前已录入过了的学生,各种操作完毕后,只需next++即可到下一位: 比方说A的最后一个节点是p,即p->next=NULL,B如果有空的头结点HeadB的话,拼接就是p->next=HeadB->next。创建还有打印也很简单啊
页:
[1]