首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >链表的相关操作

链表的相关操作

作者头像
用户1215536
发布于 2018-02-05 08:06:37
发布于 2018-02-05 08:06:37
57300
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
using namespace std;
struct node
{
    int data;
    node *next;
};
//链表的建立,创建有n个结点的链表
node *create(int n)
{
    node *head=NULL;
    node *p=NULL;
    head=new node();
    p=head;
    cin>>p->data;
    node *q;
    while(--n)
    {
        q=new node();
        cin>>q->data;
        p->next=q;
        p=q;
    }
    p->next=NULL;
    return head;
}
//打印结点
void print(node *head)
{
    node *p=head;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
//插入结点
//在指定位置weizhi上插入结点值为n的结点
//这里注意返回值不能写成void因为当weizhi为0的时候,head的值变动了,如果不返回head虽然那么原函数中的head还在原来的位置
node* insert(node *head,int weizhi,int n)
{
    node *p=NULL;
    if(weizhi<0)
    {
        return 0;
    }
    if(weizhi==0)
    {
        p=new node();
        p->data=n;
        p->next=head;
        head=p;
    }
    if(weizhi>0)
    {
        p=head;
        int num=weizhi;
        while(--num)
        {
            p=p->next;
        }
        node *t=p->next;
        node *q=new node();
        q->data=n;
        p->next=q;
        q->next=t;
    }
    return head;
}
//删除第一个值为n的结点
node *delete_node(node *head,int n)
{
    if (head==NULL)
    {
        return NULL;
    }
    else if(head->data==n)
    {
        node *p=head;
        head=head->next;
        delete p;
        return head;
    }
    else 
    {
        node *p,*q;
        p=head;
        q=p->next;
        while(q!=NULL && q->data!=n)
        {
            p=p->next;
            q=q->next;
        }
        if(q==NULL)
        {
            return head;
        }
        else 
        {
            p->next=q->next;
            delete q;
            return head;
        }
    }
}
//链表的逆转
node *reverse(node *head)
{
    node *p=NULL;//指向要逆转指针的前一个结点
    node *r=head;//指向要逆转的结点
    node *q=NULL;//指向要逆转结点的后一个结点
    while(r!=NULL)
    {
        q=r->next;
        r->next=p;
        p=r;
        r=q;
    }
    head=p;     //注意全都逆转之后,结点r已经为NULL,结点p才是最后一个有数据的结点
    return head;
}
int main()
{
    node *head=create(5);
    print(head);
    head=insert(head,2,100);
    print(head);
    head=insert(head,0,1000);
    print(head);
    head=delete_node(head,3);
    print(head);
    head=delete_node(head,5);
    print(head);
    head=delete_node(head,1000);
    print(head);
    head=reverse(head);
    print(head);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
数据结构实验之链表
1、线性表: 线性表是最基本的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
LucianaiB
2025/05/28
920
数据结构实验之链表
题目 1676: 算法2-8~2-11:链表的基本操作
题意:根据题意,意思就是实现插入,删除,展示,以及得到元素,并判断是否删除加入成功以及表内元素是否为空。
杨鹏伟
2021/03/04
2860
数据结构代码题-链表
2.在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。
愷龍
2023/10/16
4420
数据结构代码题-链表
插入有序的单链表(要求插入后元素有序排列)
某校实验室有一批计算机,按其价格从低到高的次序构成了一个单链表存放,链表中每个结点指出同样价格的若干台。现在又增加m台价格为h元的计算机,编程实现实验室计算机单链表中增加计算机的算法。
别团等shy哥发育
2023/02/27
7450
插入有序的单链表(要求插入后元素有序排列)
数据结构之链表
一、概念 (1)数组的线性序是由数组的下标决定的,链表中的顺序是由各对象中的指针所决定的 (2)链表结点结构 node *prev; node *next; int key; (3)链表结点 node *head; node *nil;//哨兵 (4)对链表的操作 LIST-SEARCH(L, k) LIST-INSERT(L, x) LIST-DELETE(L, x) (5)哨兵是个哑对象,可以简化边界条件 二、代码 (1)没有哨兵的情况 //链表结点结构 struct node   {       n
xiangzhihong
2018/02/01
6150
DS双向链表—祖玛 C++
祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。
叶茂林
2023/07/30
2670
单链表反转的分析及实现
我先画一个单链表,这个单链表有4个元素。我的思路就是,每次把第二个元素提到最前面来。比如下面是第一次交换,我们先让头结点的next域指向结点a2,再让结点a1的next域指向结点a3,最后将结点a2的
猿人谷
2018/01/17
2.3K0
单链表反转的分析及实现
链表的基本操作_简单链表
链表是环环相扣的,head头指针指向头结点,头结点指向首元结点,首元结点指向第二个结点…直到最后的结点。
全栈程序员站长
2022/11/15
6690
链表的基本操作_简单链表
DS单链表--结点交换 C++
swap(int  pa, int pb)  //pa和pb表示两个结点在单链表的位置序号
叶茂林
2023/07/30
3430
数据结构——链表
链式存储结构 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻有关术语 结点:数据元素的存储映像。由数据域和指针域两部分组成 - 数据域:存储元素数值数据 - 指针域:存储直接后继结点的存储位置 链表:n 个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构 - 单链表 - 结点只有一个指针域的链表,称为单链表或线性链表 - 双链表 - 有两个指针域的链表,称为双链表 - 循环链表 - 首尾相接的链表称为循环链表 头指针
ruochen
2021/06/28
7360
数据结构——链表
【算法设计题】合并两个非递减有序链表,第1题(C/C++)
这段代码的功能是将两个非递减有序链表合并成一个非递减有序链表。下面我将逐步解释这段代码:
命运之光
2024/08/05
3340
DS单链表--合并 C++
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
叶茂林
2023/07/30
3650
链表模板
声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%b7%e9%9c%86%e6%88%98%e6%9c%ba-6/
对弈
2019/09/04
6300
两个非递增的有序链表的合并
已知两个带头结点的非递增有序的单链表A和B,设计算法将两个单链表合并成一个非递增有序的单链表C.要求单链表C仍使用原来两个链表的存储空间
别团等shy哥发育
2023/02/27
9410
数据结构:线性表之链式存储结构
为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai,除了存储其自身的信息之外,还需存储一个指示其 直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素ai的存储映像
s1mba
2018/01/03
1.1K0
数据结构:线性表之链式存储结构
C++课本的练习题及答案(第五章)
1.语句  cout<<(1&2)<<","<<(1&&2)<<endl;  的输出结果是(    )。
Twcat_tree
2022/11/29
9280
单链表的插入删除操作(c++实现)[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116229.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
9660
2024重生之回溯数据结构与算法系列学习(6)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
要实现高效删除,可以使用一个哈希表来记录已经出现过的数值的绝对值。使用哈希表的原因是其查找和插入操作的时间复杂度为O(1)。这样我们可以在线性时间内(O(n))遍历链表,并处理每个节点是否需要删除。
盛透侧视攻城狮
2025/05/19
850
2024重生之回溯数据结构与算法系列学习(6)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
精益求精解LeetCode(82与83)
好久没有刷题与更文了,今天来一场LeetCode上面简单与中等题目多种方法刷题。
公众号guangcity
2019/09/20
7210
链表的几种基本操作
链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素。链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。可以看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。实际上,链表中的每个结点可以用若干个数据和若干个指针。结点中只有一个指针的链表称为单链表,这是最简单的链表结构。再c++中实现一个单链表结构比较简单。
C语言与CPP编程
2020/12/02
4790
相关推荐
数据结构实验之链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验