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

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

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
    那么这代码是对的。

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题