-
本来是下一台PC指向PA,但现在PC=PA,即PC也指向PA,即PC向后移动。
PC 最初指向头节点,但后来被 PA 覆盖,请注意 PC 被 PA 覆盖,LA 始终指向头节点。
-
LC是保存最终结果的链。 首先,PC指向LC的头节点(当然,它也被初始化为PA的头节点)。
其实意思是一样的,我以它为例一步一步讲解:当 pa 的元素值小于(或等于)pb 的元素值时,让 pc 的指针字段指向 pa 的位置,然后 lc 链的长度就会增加 1, 并且效果会被反映出来,它会让PC指向LC链的最后一个节点(即pc=pa; 这样下次你得到一个值较小的节点时,你可以将该节点添加到LC的尾部(因为PC指向尾部,添加的节点是pc->next = pa; )。
可以想象,如果没有和这两个语句,PC不是指向LC链的尾部,在向LC链添加节点时,必须从PC指向的位置添加,这样PC才会先断开与后面节点的连接,转而指向新节点, 导致PC后面的节点信息丢失,整个程序将失败。
-
我也不明白......
LZ需要。 我可以写一个链表合并。
-
这也取决于问题的要求。
最简单的方法是去掉链表 1 的尾部和链表 2 的头部。
然后将链表 1 的头部连接在一起以制作新的标题,并将链表 2 的末尾连接在一起以制作新的标题。
-
链表定义(百科全书):链表是物理存储单元上的一种非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接顺序实现的。 链表由一系列节点(链表中的每个元素称为节点)组成,这些节点可以在运行时动态生成。
两部分?? 它应该引用两个链表,将两个链表合并为一个。
链表的第一个节点称为头节点,最后一个节点称为尾节点(头节点和尾节点:真实或虚拟,具体取决于您的实现)。
合并:这只是一个链表添加!! 具体实现:就是将链表2的所有实节点按顺序(从头节点到尾节点)逐个插入到链表1中,即可实现合并。
Insert:Insert 具有直接函数调用。
-
for(p=&(;p>=&(;p--)p+1)=p;最后一个 p 前面有一个星号,应更改为 for(p=&(; p>=&(;p--)p+1)=*p;
然后,由于 b 的元素插入到 a 的 i 位置,我应该添加 1for (p=&(; p<=&(;p++)p-1)=*p;这里是覆盖 i+1 位置的元素,根据你写的初始条件,p 从一开始就已经指向了 i+1 位置,所以需要修改,并且随着修改的结束条件,最终修改是 for (p=&(; p<&(p++)p=*(p+1);
其他一切都很好。
ps,如果想让程序运行简单一点,建议你每次将一个B元素合并到A的时候都找一个A中的元素,但是程序会有点麻烦,另外,对于A的重复元素的自检,可以考虑写成if作为while,因为考虑到你可以平均连接三个以上的元素。
-
首先,定义两个指向链表元素的指针,一个指向 A 中的元素,一个指向 B 中的元素;
其次,取出这两个指针指向的元素的数据并比较大小:
如果 a=b,则放弃,并且两个指针都向后移动一位;
如果是 ab,则 b 插入到 olda 之后,b 向后移动一个位置。
循环直到 a 和 b 的下一个为 null
从算法上讲,复杂度应为 o(n)。
您之前使用的算法的复杂度为 o(n 2),因为遍历集合并排序到嵌套循环中。
-
1.你的算法不适合这个问题,这个想法不是创建一个新节点是使用原始空间,所以你 c=(elemtype*)malloc(sizeof(lnode)); 应该是多余的。
2.您的算法正在更改为降序,因为 ab 是递增排序的,并且您每次将指针移动到序列的末尾进行比较和插入,这是一个单向链表,因此您的算法将非常低效。
3.您需要做的就是将两个链表的节点按降序插入到新的链表中。
4.例如,可以将 A 中的节点反转,然后将 B 中的节点按降序逐个插入到 A 中的适当位置,最后得到一个链表作为所需的 C 链表。