【悬赏】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)?
谢谢_ 展开
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)?
谢谢_ 展开
3个回答
展开全部
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;
}
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就是最后一个结点的地址 另外,头指针是固定的,头指针只指向头结点循环链表一般不设头指针,只设一个尾指针
展开全部
1、头指针变量的值是最后一个结点的地址。
2、可以。
3、不可以这样。想像两串念珠,要并成一串,就要在每一串上各挑两颗相邻的珠子,把中间一段绳子剪开,然后把四个线头再交叉结起来。要剪开的就是头结点和次结点中间的那段。
p=ha->next;
q=hb->next;
ha->next=q;
hb->next=p;
我不太理解你为什么要释放hb的头结点。照你创建循环链表的方式,头结点也是链表中的一个结点,除非先删除它,不然不可以释放它。
2、可以。
3、不可以这样。想像两串念珠,要并成一串,就要在每一串上各挑两颗相邻的珠子,把中间一段绳子剪开,然后把四个线头再交叉结起来。要剪开的就是头结点和次结点中间的那段。
p=ha->next;
q=hb->next;
ha->next=q;
hb->next=p;
我不太理解你为什么要释放hb的头结点。照你创建循环链表的方式,头结点也是链表中的一个结点,除非先删除它,不然不可以释放它。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 你想的第二个。
2 你最后一个节点原来有标记的吧 。 自己定义一个p=head 然后再最后一个节点的时候->next=p
就可以了的。
3 如果你要连接成循环链表的话 。 那么 ha的最后一个节点的指针指向hb , 然后hb最后一个节点 的的指针 指向ha
4 free(hb)
2 你最后一个节点原来有标记的吧 。 自己定义一个p=head 然后再最后一个节点的时候->next=p
就可以了的。
3 如果你要连接成循环链表的话 。 那么 ha的最后一个节点的指针指向hb , 然后hb最后一个节点 的的指针 指向ha
4 free(hb)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询