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

 更新时间:2022年07月13日 10:13:37   作者:nefu_lmy  
这篇文章主要介绍了C语言实现头插法建立单链表的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

首先要明确一点,利用头插法建立出来的单链表的输出都是逆序的(就是和你的输入顺序反着来的)然后就是要明确生成的新结点是一个个加在某个结点的前面的(这个结点不一定是头结点,下面的代码是插在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++11标准库bind函数应用教程

    C++11标准库bind函数应用教程

    bind函数定义在头文件functional中,可以将bind函数看做成一个通用的函数适配器,他接收一个可调用对象,生成一个新的可调用对象来"适应"原对象的参数列表。本文将带大家详细了解一下bind函数的应用详解
    2021-12-12
  • C++开发之CRC校验实例详解

    C++开发之CRC校验实例详解

    这篇文章主要介绍了C++开发之CRC校验实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • C++ Template 基础篇(一):函数模板详解

    C++ Template 基础篇(一):函数模板详解

    这篇文章主要介绍了C++ Template函数模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 七夕表白! C语言实现爱情红玫瑰

    七夕表白! C语言实现爱情红玫瑰

    这篇文章主要为大家详细介绍了C语言实现爱情红玫瑰,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • c++中string类型和int类型相互转换的几种常用方法

    c++中string类型和int类型相互转换的几种常用方法

    我们在编写程序时,经常涉及到int与string之间的类型转换,本文主要介绍了c++中string类型和int类型相互转换的几种常用方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 详解C++实现线程安全的单例模式

    详解C++实现线程安全的单例模式

    这篇文章主要介绍了C++实现线程安全的单例模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 详解C++编译器优化技术

    详解C++编译器优化技术

    现代编译器缺省会使用RVO(return value optimization,返回值优化)、NRVO(named return value optimization、命名返回值优化)和复制省略(Copy elision)技术,来减少拷贝次数来提升代码的运行效率。
    2021-06-06
  • C++使用tinyxml库处理XML文件

    C++使用tinyxml库处理XML文件

    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树,本文为大家介绍的是使用tinyxml库处理XML文件,需要的可以参考一下
    2023-07-07
  • C++中stack的pop()函数返回值解析

    C++中stack的pop()函数返回值解析

    这篇文章主要介绍了C++中stack的pop()函数返回值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C语言实现高精度加减法

    C语言实现高精度加减法

    这篇文章主要为大家详细介绍了C语言实现高精度加减法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论

?


http://www.vxiaotou.com