高分求解数据结构的单链表算法问题请在答案里分四点作答,麻烦详细点谢谢

void merge(LNode *&A,LNode *&B,LNode *&C) //①这里的ABC是头结点的指针域的指针吗?也就是指向开始结点的指针?{ LNode *p=A->next; //②此处A->next按照c语言中理解代表A所指向的开始结点的指针域,那么p等于开始节点的指针域next,那么p指向的不就是开始结点的下一个结点吗,这样下面的第一次循环就不能选取到开始结点的值进行插入了,这里到底应该怎么理解? LNode *q=B->next; LNode *r;
C=A;
C->next=NULL; //③构建新的链表时都要像这样处理吗,这个操作叫什么,是不是类似于c语言中的初始化
free(B);
r=C;
while (p!=NULL && q!=NULL)
{ if(p->data <= q->data) //④第一次循环p指向的是开始节点的data? { //这里是尾插法操作 }
}}

看了一下程序,你这个函数应该是归并两个有序链表到第三个链表。
(1),三个参数应该是三个链表的头指针
(2),写你这个程序的人,应该设计的是每个链表的第0个节点不存数据,该节点的next才是真正的第1个数据节点,因此A和B都拿了Next的指针。
(3),让一个节点的Next=NULL,是保证链表的最后一个节点不乱指,从而也可以从头指针遍历的时候知道该节点是最后一个节点。
(4),开始比较两个节点中数据的大小,下面的语句应该根据判断放一个数据到归并后的链表。追问

给您看下原题,作者的意思应该ABC是头结点

追答

是的,如果程序写成这样,应该头结点是不存数据区的,只是用来指向第一个数据区。

你看一下这个链表的创建函数。

追问

追答

你的理解是对的,这个种链表的头结点不存数据。

你的字写的不错

追问

谢谢您了,分给您了

温馨提示:答案为网友推荐,仅供参考