C语言如何实现头插法建立单链表

 更新时间:2022年07月13日 10:13:37   作者:nefu_lmy  
这篇文章主要介绍了C语言实现头插法建立单链表的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

首先要明确一点,利用头插法建立出来的单链表的输出都是逆序的(就是和你的输入顺序反着来的)然后就是要明确生成的新结点是一个个加在某个结点的前面的(这个结点不一定是头结点,下面的代码是插在p的前头),这就是头插法。

怎么将结点一个个插入在某个结点前面呢?

下面的图可以比较详细的展示出来:

至少对我来说挺详细的哈

p->next=head->next; //一开始 head->next=NULL; 
head->next=p;//然后将p指针指向head结点指向的下一个结点

以下是图像展示:

然后再在头结点的后面插入新的结点

再执行一遍上面的代码, 然后head后面就连上了新的结点,p原本指向的结点前面也增加了一个新的结点,然后p就指向新加入的结点了。

以下是图像展示:

注!:要先写p->next=head->next,然后才能写head->next=p;因为如果先写head->next=p,然后再写head->next=p->next,结果就会变成head->next原本要指的是插入的结点,然后又p->next=head->next,那 head->next最后指向的就不是要插入的结点了,变成了p要指向的下一个结点,而p->next一开始就是NULL。

也就是说,新的节点根本就没连上去,p的前面根本没有插入新的结点,head->next也一直是NULL。(这段看不懂就不看了)

然后就是不断地重复上述过程,在头节点和新插入的节点之间建立联系,同时在新插入的节点和上一个插入的节点之间建立联系,最终得到一个完整的单链表。

以下是代码展示:

#include <bits/stdc++.h>
 
using namespace std;
//利用头插法建立的单链表输出都是逆序的
typedef struct node
{
    int data;//数据域,存放数据
    struct node *next;//指针域,存放指针,存放后继结点的信息
}no;//no是结构体的名字 
 
int main()
{
    no *head,*tail,*p;
    head=new no;
    head->next=NULL;
    tail=head;
    int n;
    cin>>n;
    while(n)
    {
        p=new no;
        p->data=n;
        p->next=head->next;//第一次的时候p->next指的是NULL,
        //再往后,指的就是头结点后面的结点
        head->next=p;//指针p也可以向前移动的哦,不一定就是要向后移动
        cin>>n;
    }
    p=head->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return 0;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • c++显式栈实现递归介绍

    c++显式栈实现递归介绍

    大家好,本篇文章主要讲的是c++显式栈实现递归介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 超详细分析C语言动态内存管理问题

    超详细分析C语言动态内存管理问题

    动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存,本文带你深入探究C语言中动态内存的管理
    2022-04-04
  • C++11 Unicode编码转换

    C++11 Unicode编码转换

    这篇文章主要介绍了C++11 Unicode编码转换的相关资料,帮助大家更好的理解和学习c++11,感兴趣的朋友可以了解下
    2020-08-08
  • QT实现简单打地鼠游戏

    QT实现简单打地鼠游戏

    这篇文章主要为大家详细介绍了QT实现简单打地鼠游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 解读C++中枚举(enum)的使用

    解读C++中枚举(enum)的使用

    对于开发C++来说,枚举是一个几乎必然用到的功能。当然今天要讲的枚举肯定不是平常漫不经心的使用,而是从里到外地深扒它。本文就来逐渐揭开它神秘地面纱,发现一些未曾注意到的东西吧
    2023-03-03
  • C++三色球问题描述与算法分析

    C++三色球问题描述与算法分析

    这篇文章主要介绍了C++三色球问题描述与算法分析,结合注释形式详细讲述了三色球问题的描述与相应的算法设计思路,并给出了相关的实现方法,需要的朋友可以参考下
    2016-05-05
  • Opencv使用鼠标任意形状的抠图

    Opencv使用鼠标任意形状的抠图

    这篇文章主要为大家详细介绍了Opencv使用鼠标任意形状的抠图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 深入学习C++中的函数概念

    深入学习C++中的函数概念

    这篇文章主要介绍了C++中的函数概念,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C/C++实操True and false详解

    C/C++实操True and false详解

    这篇文章主要给大家介绍了关于Python中常用的数据类型bool(布尔)类型的两个值:True和False的相关资料,通过示例代码给大家进行了解惑,让对这两个值有所疑惑的朋友们能有起到一定的帮助,需要的朋友下面来一起看看吧。
    2021-09-09
  • C++不使用变量求字符串长度strlen函数的实现方法

    C++不使用变量求字符串长度strlen函数的实现方法

    这篇文章主要介绍了C++不使用变量求字符串长度strlen函数的实现方法,实例分析了strlen函数的实现原理与不使用变量求字符串长度的实现技巧,需要的朋友可以参考下
    2015-06-06

最新评论