zoukankan      html  css  js  c++  java
  • 09 尾插入法创建单链表(实现2)

    1,使用头指针的方式,不创建头结点

     1 /*尾插入实现方法2*/
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 //链表中节点的结构
     6 typedef struct Link {
     7     int  data;
     8     struct Link* next;
     9 }link;
    10 
    11 //链表初始化
    12 link* initByTailInsert() {
    13     link* phead = NULL;//创建头指针
    14     link* first_node = (link*)malloc(sizeof(link));//创建第一个节点
    15     //第一个结点先初始化
    16     first_node->data = 1;
    17     first_node->next = NULL;
    18     phead = first_node;//头指针指向第一个节点
    19 
    20     //尾插入赋值
    21     for (int i = 2; i < 5; i++) {
    22         link* new_node = (link*)malloc(sizeof(link)); //申请新的结点
    23         new_node->data = i;
    24         new_node->next = NULL;
    25         first_node->next = new_node;  //第一个结点的指针域指向这个新申请的结点
    26         first_node = new_node;  //第一个结点后移
    27     }
    28 
    29     printf("头指针指向的值是:%d
    ", phead->data);//1
    30     return phead;  //将指向第一个结点的头指针返回
    31 }
    32 
    33 
    34 
    35 void showLink(link* phead) {
    36     link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针
    37     //只要tmp指针指向的结点的next不是Null,就执行输出语句。
    38     while (tmp!=NULL) {
    39         printf("%d ", tmp->data);
    40         tmp = tmp->next;
    41     }
    42     printf("
    ");
    43 }
    44 
    45 void main() {
    46     //初始化链表(1,2,3,4)
    47     printf("初始化链表为:
    ");
    48     link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针
    49     showLink(phead);
    50 }

    使用创建头结点的方式:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 typedef struct Link {
     5     int data;
     6     struct Link* next;
     7 }link;
     8 
     9 
    10 link* initLink(link* headNode) {
    11     headNode = (link*)malloc(sizeof(link)); //头结点
    12     headNode->next = NULL;
    13     headNode->data = -1; //头结点的数据域给值是 -1
    14 
    15     link* headNode2 = headNode; //复制一个头结点
    16 
    17     for (int i = 1; i <= 10; i++) {
    18         link* new_node = (link*)malloc(sizeof(link));
    19         new_node->data = i;
    20         new_node->next = NULL;
    21         headNode2->next = new_node;
    22         headNode2 = new_node;
    23     }
    24 
    25     return headNode;
    26 }
    27 
    28 
    29 void showLink(link* headNode) {
    30     link* temp = headNode;
    31     while (temp != NULL) {
    32         printf("%d  ", temp->data);
    33         temp = temp->next;
    34     }
    35     printf("
    ");
    36 }
    37 
    38 void main() {
    39     link* head_node = NULL;
    40     head_node = initLink(head_node); //获取经过初始化后的双向链表的头结点
    41     printf("初始化单链表是:
    ");
    42     showLink(head_node);
    43 
    44 }

  • 相关阅读:
    inode满处理
    power shell 脚本了解
    免密脚本带端口
    linux文件 特殊权限的使用
    linux批量配置ip
    编译安装常用包+阿里镜像源-常用资源-系统-下载-科莱软件下载-docker仓库包-安全圈-杏雨梨云-图形界面安装-docker私有双仓库-阿里源报错处理-centos7目录大小
    expect免互交 常用编辑文本
    vim 插件 -- taglist
    vim 插件 -- ctags
    vim 插件 -- omnicppcomplete
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12457695.html
Copyright © 2011-2022 走看看