早上无叶花 2016-08-13 04:09 采纳率: 33.3%
浏览 989
已采纳

新建链表的时候有点小问题

void create_node_fun(int n)
15 {

16 int i;
17 head = (NODE*)malloc(sizeof(NODE));
18 if(head == NULL)
19 {
20 printf("head==NULL,error!!!");
21 exit(0);
22 }
23 head->data = 0;
24 head->link = NULL;
25 NODE *p = NULL;
26 for(i = 0;i < n;i++)
27 {
28 p = (NODE *)malloc(sizeof(NODE));
29 p->data = i;
30 p->link = head->link;
31 head->link = p;
32 }
33 }

上面代码的30和31行代码:把第一次开辟出来的节点称为p1,第二次开辟出来的节点称为p2,那这两行不就表示p1->link = head->link; head->link = p1; 然后到第二个节点的时候就变成这样了: p2->link = p1; p1 = p2。
这样理解不知道对不对,反正我感觉很奇怪,应该是不对的,但是不明白,所以请教一下各位大神。
还有,我看到网上有人是专门是有开辟一个新的节点,叫做尾指针,专门用来指向链表的结尾的。不知道这两种方法哪种可用性高点。

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-08-13 04:13
    关注

    看你这段代码做什么了,如果你想每次在头节点后面插入一个新节点,结果是
    head->n->n-1->n-2->...->3->2->1
    那么这代码是对的。

    插入节点既可以在头插入(如你的代码),也可以在尾插入,插入顺序既可以逆序(如你的代码),也可以正序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog