帮忙看一下问题怎么改?链表 ,两层

2025-02-27 17:17:09
推荐回答(2个)
回答1:

//#include "iostream.h"
#include
using namespace std;
struct node //结点类型定义
{
int data; //结点的数据域
node *next; //结点的指针域
node *son;
};

node *head,*p,*q;
node *pp,*qq;

void main()
{
head=new node;
head->data=0;
head->next = NULL;
p=head;

for(int i=0;i<5;i++)
{
q=new node;
p->data=i;
p->next=q;
p->son=new node;//初始化一个son不然的话son是空的
pp=p->son;

for (int j=6;j<9;j++)
{
qq=new node;
qq->next=NULL;
qq->son=NULL;
pp->data = j; //有问题*****
pp->next = qq;
pp=qq;

}
p=q;
}
p->next=NULL;
pp->next =NULL;
//*****************************************
p=head;
while(p->next!=NULL)
{
cout<data< pp=p->son;
if (pp->next!=NULL) //这里pp没有动啊,是不是改成IF啊?
{
cout<data< }
p=p->next;
}
}

回答2:

先建立son节点,并保持建议的son节点的头节点,然后建立父节点的同时,将son节点保存到父节点,这样才是正确的,修改如下:
#include "iostream.h"
struct node //结点类型定义
{
int data; //结点的数据域
node *next; //结点的指针域
node *son;
};

node *head,*p,*q;
node *sonHead,*pp,*qq;

int main( int argc, char** argv )
{
head = p = NULL;

for(int i=0;i<5;i++)
{
//先建立son节点,并保存sonHead
pp = NULL;
for (int j=6;j<9;j++)
{
qq=new node;
qq->data = j;
qq->next = NULL;
qq->son = NULL;

if (NULL == pp)
sonHead = pp = qq;
else
{
pp->next = qq;
pp = pp->next;
}
}

q=new node;
q->data = i;
q->next = NULL;
q->son = sonHead;

if (NULL == head)
head = p = q;
else
{
p->next = q;
p = p->next;
}
}

//p->next=NULL;
//pp->next =NULL;
//*****************************************
p=head;
while(p != NULL)//这里不要判断p->next,这样会少输出一次
{
cout<data< pp=p->son;
while (pp != NULL)
{
cout<data< pp = pp->next;
}
p=p->next;
}

return 0;
}

对于head节点和sonHead节点,并没有分配空间,而且用head节点指向第一个空间
你在实现的时候,head节点有分配实际的空间,但是son没有分配空间就使用,所以错误
运行后的结果为:
0
6
7
8
1
6
7
8
2
6
7
8
3
6
7
8
4
6
7
8