首页 > 其他分享 >链表1: 静态单链表

链表1: 静态单链表

时间:2024-04-13 22:00:44浏览次数:17  
标签:单链 静态 NULL 后继 链表 next Node2 LinkNode

链表1: 静态单链表


单链表的结构

数据结构1 | 单链表其实真的很简单。 - 知乎

链表包含了数据域指针域,

数据域存储数据,

指针域存储下一个结点的地址


链表的特点

链表的优势在于数据的删改, 在链表中查询第$i$个元素需要从第一个结点开始遍历链表,, 因此在数据的顺序读取中链表的优势不如数组.


链表的插入操作

设newNode为新节点, curNode为将插入的位置的结点, preNode为curNode的前驱

链表在进行插入时

1.将newNode的后继指向curNode

2.将preNode的后继指向newNode


链表的删除操作

设Node2为需要删除结点, Node1为Node2的前驱, Node3为Node2的后继

链表在进行删除时

1.将Node1的后继指向Node2后继的后继

2.将Node2后继指向NULL

3.释放Node2的内存空间


定义静态单链表的数据结构

// 静态链表创建
typedef struct LinkNode{
    int data; //链表数据域
    struct LinkNode *next; //链表指针域
}LinkNode;

测试

int main(){
    // 链表在前进到下一个元素时, 不能用p++, ++跳跃四个字节
    LinkNode node1 = {10,NULL};
    LinkNode node2 = {20,NULL};
    LinkNode node3 = {30,NULL};
    LinkNode node4 = {40,NULL};
    //在结点之间建立连接
    node1.next = &node2;
    node2.next = &node3;
    node3.next = &node4;

    LinkNode *p = &node1; // 定义指针p指向当前节点
    // 遍历链表
    while(p){ //不为空时遍历链表
        // cout << (*p).data << endl;
        cout << p->data << endl;
        p = p->next;
    }
    system("pause");
    return 0;
}


标签:单链,静态,NULL,后继,链表,next,Node2,LinkNode
From: https://www.cnblogs.com/HIK4RU44/p/18133445

相关文章

  • JZ76 删除链表中重复的节点
    1、相似题classSolution{public:ListNode*deleteDuplicates(ListNode*head){//判空if(head==NULL)returnnullptr;ListNode*p1=head;ListNode*p2=p1->next;while(p2){......
  • 数据结构-链表
    数据结构-链表1.链表的基本概念:链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向列表中下一个节点的引用(或指针)。2.单向链表:单向链表的每个节点只有一个指向下一个节点的链接。这种结构使得遍历只能单向进行,从头节点开始到尾节点结束。classNode:d......
  • 虚拟机Centos设置静态ip
    NAT模式相当于宿主机内部的一个虚拟网络,与宿主机公用一个IP.桥接相当于和宿主机平行,独立的IP和网卡.1设置开机自启#vi/etc/sysconfig/network-scripts/ifcfg-ens33将no改为yes#ONBOOT=yes#systemctlrestartnetwork#重启网络2下载网络工具如果有就不需要安装了......
  • JZ22 链表中倒数最后k个节点
    /***structListNode{* intval;* structListNode*next;* ListNode(intx):val(x),next(nullptr){}*};*/classSolution{public:/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@param......
  • JZ52 两个链表的第一个公共节点
    /*structListNode{ intval; structListNode*next; ListNode(intx): val(x),next(NULL){ }};*/#include<endian.h>classSolution{public: //返回类型为节点指针类型,传入的是两个链表的头节点ListNode*FindFirstCommonNode(ListNode*pHead1,......
  • BM2 链表内指定区间反转
    代码有点长,但是我比较喜欢这种做法。注意的点是如果第一个参与了反转,那么返回的就是区间反转之后的头结点,而不是原始头结点。importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*publicListNode(intval){*this.val=......
  • BM1 反转链表
    开始刷数据结构了。1.递归importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*publicListNode(intval){*this.val=val;*}*}*/publicclassSolution{publicListNodeReverseList(ListNodehea......
  • JZ25合并两个排序链表
    /***structListNode{* intval;* structListNode*next;* ListNode(intx):val(x),next(nullptr){}*};*/#include<cstddef>classSolution{public:/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*......
  • 天梯赛-练习集-L2-002 链表去重(25分)
    L2-002链表去重代码长度限制:16KB时间限制:400ms内存限制:64MB题目描述给定一个带整数键值的链表L,你需要把其中绝对值重复的键值结点删掉。即对每个键值K,只有第一个绝对值等于K的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定L为21→-15→-15......
  • 面相对象(三):模拟链表
    面向对象的基本原理是对对象建模,让抽象的逻辑封装成具象的行为,更方便人们理解和使用。在前面的文章中我写了关于继承的一些理解,一般来说这里应该讨论与继承同为面向对象三个主要特征的多态与封装了。但是我想多态与封装是一种伴随着类的定义自然而然形成的现象,只有先接触了一定数......