typedef struct shuanglianbiao
{
struct shuanglianbiao* qian;
int a;
struct shuanglianbiao* next;
}ss;
ss* end, * head;
ss* creat(int n)
{
ss * node;
head = (ss*)malloc(sizeof(ss));
end = head;
end->qian = NULL;
for (; n > 0; n--)
{
node = (ss*)malloc(sizeof(ss));
scanf("%d", &node->a);
end->next = node;
node->qian = end;
end = end->next ;
}
end->next = NULL;
return head;
}
以上是我看网上的的创建双链表,应该是对的;我的问题主要是从for那里开始;
以下是我的码,求好心人帮我看看;
typedef struct shuanglianbiao
{
struct shuanglianbiao* qian;
int a;
struct shuanglianbiao* next;
}ss;
ss* end, * head;
ss* creat(int n)
{
ss * node;
head = (ss*)malloc(sizeof(ss));
end = head;
end->qian = NULL;
for (; n > 0; n--)
{
node = (ss*)malloc(sizeof(ss));
scanf("%d", &node->a);
end->next = node;
node->qian = end->qian;
end = node ;
}
end->next = NULL;
return head;
}
在这部分源码下,当我使用 end->qian->n时,visual提醒我end->qian是个空指针,,求大神帮我从for开始看看我的创建错在哪
你的next指针没有问题,你的问题是你的qian指针。
你的头结点的qian是NULL,next是第一个首元素节点,但是你的首元素节点的qian指向了头结点qian的NULL
然后,你的end尾指针等于你的第一个节点,这也没错。
当你申请第二个元素节点时,你的end->next还是没有问题,但是你的node的qian却指向了end->qian即头结点head。
也就是说,你的所有next指针都没有问题,但是你的申请的元素节点的qian指针永远指向的是在你之前的第二个节点。
当你使用end->qian的时候,如果此时你的节点到了头结点后的第一个首元素节点,那么你的end->qian的实际上指向了空,所以没有end->qian->a这个变量。你直接只创一个首元素节点实验一下,系统就会给你报错了。
正确的for循环体应该是第一个程序那样写的,重在理解,理解不了就画图看看
虽然你赋值了,node->qian = end->qian;但是这里的end->qian也是空的啊。
猫叔压力大:如果解决了你的疑惑,麻烦点个采纳呗。
我的那个码,所有qian指针全都是指向了head->qian所指向的 NULL;把我的码 node->qian=end->qian; 改成node->qian=end;就可以。在链表中内部结点的的前后指针一定要指向 前后区域 ,而不是前后区域的指针;多谢两位大神!!