当前位置:网站首页>Basic knowledge of linked list
Basic knowledge of linked list
2022-07-07 22:49:00 【Qingshan's green shirt】
Basic knowledge of linked list
Type of linked list
What is a linked list , A linked list is a linear structure connected in series by pointers , Each node is made up of two parts , One is the data field and the other is the pointer field ( Holds a pointer to the next node ), The pointer field of the last node points to null( A null pointer means ).
The entry point of the link is called the head node of the list, which is head.
Type of linked list
Single chain list
Just now
Double linked list
A node in a single linked list can only point to the next node of a node .
Double linked list : Each node has two pointer fields , One points to the next node , One points to the previous node .
Double linked list You can query forward or backward .
Circular linked list
Circular linked list , seeing the name of a thing one thinks of its function , The linked list is connected end to end .
Circular linked list can be used to solve Joseph ring problem .
storage
Arrays are continuously distributed in memory , But linked lists are not continuously distributed in memory .
The linked list links the nodes in the memory through the pointer of the pointer field .
So the nodes in the linked list are not continuously distributed in memory , It's scattered on some address in memory , The allocation mechanism depends on the memory management of the operating system .
As shown in the figure, the starting node of this linked list is 2, The termination node is 7, Each node is distributed in a different memory address space , Connected in series by a pointer .
Code —— Definition of linked list
// Single chain list
struct ListNode{
int val;// Data stored on the node
ListNode *next;// Pointer to the next node
ListNode(int x):val(x),next(NULL){
}// Constructors
};
It's OK without this constructor ,c++ A constructor will be generated by default .
But this constructor does not initialize any member changes , Two examples :
Initialize the node by defining its own constructor :
ListNode* head = new ListNode(5);
Use the default constructor to initialize the node
ListNode* head = new ListNode(); head->val = 5;
So if you don't define a constructor and use the default constructor , You can't assign values to variables directly during initialization !
Operation of linked list
Delete node
As long as C Node next The pointer Point to E Node is OK .
That's what some students said ,D Nodes are still in memory ? It's just not in this list .
That's true , So in C++ It's better to release this manually D node , Free up this memory .(free)
Other languages such as Java、Python, It has its own memory recovery mechanism , You don't have to release it yourself .
Add node
It can be seen that the addition and deletion of linked list are O(1) operation , And it doesn't affect other nodes .
But be careful , If you delete the fifth node , You need to find the fourth node from the beginning through next Pointer to delete , The time complexity of the search is O(n).
Performance analysis
Note the insertion of the linked list / The deletion time complexity is O(1) Because the previous node is known , If you simply delete a specific element from a linked list , So you need to traverse + Delete , Time complexity is O(n) 了 .
When an array is defined , The length is fixed , If you want to change the length of the array , You need to redefine a new array .
The length of the linked list can be unfixed , And it can be added and deleted dynamically , Suitable for data volume is not fixed , Add and delete frequently , Less query scenarios .
边栏推荐
- Get the week start time and week end time of the current date
- . Net automapper use
- Revit secondary development - shielding warning prompt window
- OpenGL jobs - shaders
- C development - interprocess communication - named pipeline
- Revit secondary development - project file to family file
- Record a garbled code during servlet learning
- Debezium系列之:源码阅读之SnapshotReader
- Add get disabled for RC form
- Revit secondary development - get the thickness / length / height of the beam
猜你喜欢
ASP.NET Core入门五
The PHP source code of the new website + remove authorization / support burning goose instead of pumping
Blender exchange group, welcome to the water group ~
如何选择合适的自动化测试工具?
0-5VAC转4-20mA交流电流隔离变送器/转换模块
PHP method of obtaining image information
Overseas agent recommendation
PKPM 2020 software installation package download and installation tutorial
如何选择合适的自动化测试工具?
苹果在iOS 16中通过'虚拟卡'安全功能进一步进军金融领域
随机推荐
Dayu200 experience officer MPPT photovoltaic power generation project dayu200, hi3861, Huawei cloud iotda
OpenGL configure assimp
行测-图形推理-5-一笔画类
The essence of analog Servlet
Revit secondary development - wall opening
OpenGL job coordinate system
How to choose the appropriate automated testing tools?
Customer case | China law network, through observing the cloud, greatly shortens the time of fault location
0-5vac to 4-20mA AC current isolated transmitter / conversion module
How to close eslint related rules
Cataloger integrates lidar and IMU for 2D mapping
php 获取图片信息的方法
Explain in detail the communication mode between arm A7 and risc-v e907 on Quanzhi v853
Form组件常用校验规则-2(持续更新中~)
Unity development --- the mouse controls the camera to move, rotate and zoom
如何选择合适的自动化测试工具?
Firefox browser installation impression notes clipping
Details of the open source framework of microservice architecture
怎样写一个增广矩阵到txt文件中
Microservice Remote debug, nocalhost + rainbond microservice Development second Bomb