【悬赏】C语言,数据结构,循环链表问题!

1、书上说“头指针指向最后一个结点”,这个意思是说头指针指向最后一个结点的地址,还是说最后一个节点的next指针域里面存放着头指针head?2、循环链表创建:head=(... 1、书上说“头指针指向最后一个结点”,这个意思是说头指针指向最后一个结点的地址,还是说最后一个节点的next指针域里面存放着头指针head?
2、循环链表创建:
head=(LinkList)malloc(sizeof(LNode));
p=head;
p->next=head;
while(……){
r=(LinkList)malloc(sizeof(LNode));
r->next=head;//(就是说每每新建一个结点,它的next总是赋值为head对吧?)
p->next=r;
p=r;
}
可以如上这么创建吗?

3、循环链表,有两个ha和hb表,要求合并。书上写“仅需修改两个指针的值即可”。
可不可以这样做:
p=ha;ha=hb->next;hb=p;
或者p=hb;hb=ha;ha=p->next;
但是要释放hb的头结点的空间如何实现?是free(hb)还是free(hb->next)?

谢谢_
展开
 我来答
r1renhw
2012-11-03 · TA获得超过1577个赞
知道小有建树答主
回答量:810
采纳率:100%
帮助的人:413万
展开全部
1、指针指向一个结点是指利用此指针可以直接访问这个结点,包括这个结点的data和next所以指针指向最后一个结点,代表这个指针是最后一个结点的地址
2、循环链表是最后一个结点的next域指向头结点,上面的方法是尾插法建链表,新建的结点插在表尾,即为最后一个结点,所以每建一个,其next域就应修改为head
3、//La和Lb是两个仅设尾指针的循环链表
//将Lb合并到La的表尾,由La指示新表
void MergeList(LinkList * La,LinkList Lb)
{
LinkList p = Lb->next;
Lb->next = (* La)->next;
(* La)->next = p->next;
free(p);
(* La) = Lb;
}
追问
谢谢您的回答。
“头指针指向最后一个结点”,是说的这个头指针head指向最后一个结点的地址吗?实际和倒数第二个结点的next域里面的值一样?
还是这个“头指针指向最后一个结点”,说是head的值放在最后一个结点的next里面?
谢谢
追答
如果是循环链表 并且说“头指针head指向最后一个结点”,意思是head指向链表的最后一个结点,最后一个结点的next域指向第一个结点 指针就是地址,“头指针head指向最后一个结点”,表示head就是最后一个结点的地址 另外,头指针是固定的,头指针只指向头结点循环链表一般不设头指针,只设一个尾指针
burkwen
2012-11-03 · TA获得超过2522个赞
知道大有可为答主
回答量:1104
采纳率:100%
帮助的人:647万
展开全部
1、头指针变量的值是最后一个结点的地址。
2、可以。
3、不可以这样。想像两串念珠,要并成一串,就要在每一串上各挑两颗相邻的珠子,把中间一段绳子剪开,然后把四个线头再交叉结起来。要剪开的就是头结点和次结点中间的那段。
p=ha->next;
q=hb->next;
ha->next=q;
hb->next=p;
我不太理解你为什么要释放hb的头结点。照你创建循环链表的方式,头结点也是链表中的一个结点,除非先删除它,不然不可以释放它。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无人学cYa86
2012-11-03 · 超过11用户采纳过TA的回答
知道答主
回答量:40
采纳率:100%
帮助的人:28.3万
展开全部
1 你想的第二个。
2 你最后一个节点原来有标记的吧 。 自己定义一个p=head 然后再最后一个节点的时候->next=p
就可以了的。
3 如果你要连接成循环链表的话 。 那么 ha的最后一个节点的指针指向hb , 然后hb最后一个节点 的的指针 指向ha
4 free(hb)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式