zoukankan      html  css  js  c++  java
  • 单项链表的建立(1)

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

    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所指向的值。

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

  • 相关阅读:
    FXBlurView用法
    NSAttributedString用法
    SDWebImage的使用
    UITextField 对输入金额的约束
    Delphi获取计算机名
    delphi下实现控制其它窗体中的控件[转]
    根据版本的不同整理所有的绿色SQL Server[转]
    点击TWebBrowser中的超级链接不在新的IE窗口打开
    Delphi 快速获取本机的IP地址[转]
    Delphi下如何使程序在Win7/Vista上用管理员权限运行[转]
  • 原文地址:https://www.cnblogs.com/wktwj/p/4864774.html
Copyright © 2011-2022 走看看