首页 > 其他 > 详细

单项链表的建立

时间:2015-10-09 19:38:51      阅读:166      评论:0      收藏:0      [点我收藏+]

链表是最基本的数据结构之一,建立单项链表步骤如下

  1. 定义链表节点
  2. 定义三个指针——头指针,尾指针,当前结点指针。并分别申请内存,初始化
  3. 判断是不是头指针,如果是,则当前结点赋值给头指针,尾指针的后继为空;如果当前不是头指针,在尾指针后追加当前结点
  4. 完成插入操作后,更新尾指针和尾指针的后继
  5. 重新申请一块内存为新的扩展节点使用

定义简单的节点结构体

1 typedef struct Node
2 {
3     int data;
4     struct Node *next;
5 } Node;

 

最后返回链表的头指针

 1 Node *create()
 2 {
 3     int n;
 4     int i;
 5     Node *head=NULL;
 6     Node *tail;
 7     Node *p;
 8     tail = (Node *)malloc(sizeof(Node));
 9     p = (Node *)malloc(sizeof(Node));
10     if(p==NULL)
11     {
12         printf("Fail to create a new node.....");
13         return NULL;
14     }
15     else
16     {
17         for(i=0; i<10; i++)
18         {
19             p->data=i;
20             if(head==NULL)
21             {
22                 head=p;
23                 tail->next=NULL;
24             }
25             else
26             {
27                 tail->next=p;
28             }
29             tail=p;
30             tail->next=NULL;
31             p = (Node *)malloc(sizeof(Node));
32         }
33     }
34     return head;
35 }

 

问题

在第一次写链表的时候,每次输出链表的时候总是输出尾节点的值。后来发现,原来是指针的问题。

就是每次添加一个节点时,没有新申请一块未使用的内存,而是继续使用p,而p和head都是指向头节点的(第22行),所以,使用p和head都能改变认为的头节点的值,所以每次改变p,实际上就是改变了head所指向的值。

所以,这里应该为新节点申请一块新的内存

单项链表的建立

原文:http://www.cnblogs.com/wktwj/p/4864774.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!