对链表的简单复习和理解

最近在找实习,考的是leetcode的题目,被完虐了,决定狠下心来好好学习,今天要弄懂链表。

首先在面试过程中让手写代码,需要注意的地方,class 后面的__init__函数,不要犯基本的错误,挺丢人的。

好了步入正题,主要参考这篇文章https://mp.weixin.qq.com/s?__biz=MzUyNjQxNjYyMg==&mid=2247484127&idx=1&sn=d681b847e69e3a7fd729e3b480731aa1&chksm=fa0e6d5ecd79e4487f4427433682a9d7dc2d115224c2e3b5b10ca1dd37781f1201013cbd6584&mpshare=1&scene=1&srcid=0906rYLNJqGuqnjz2rP6TfMj&sharer_sharetime=1567750044735&sharer_shareid=681b9acc86a464fe16d7d37df2b991c3&pass_ticket=FwvEAn%2Fe9aWDV2a9bX9IChtPP5aBdf%2F3IX8imiYGHwtYybakfKNUl4HjuIJolhed#rd

链表,他具有动态的能力,不需要处理固定容量的问题,插入删除都会比数组来的简单一点,而麻烦之处就在于,他缺失了高效的随机访问的能力,无法通过索引直接获取对应的元素,在数组中能直接寻找索引的原因是数组开辟的空间在内存中是连续分布的,直接计算出数据所存储的内存地址,用O(1)复杂度可以拿出。

链表需要用next查找,每个节点的存储地址不同。

1、链表的插入

需要注意顺序,先在insert_node后面加上原来的后部节点,再把这一段加在原来的前部节点的后面

2、虚拟的头结点,dummyHead

用关键字new生成 dummyHead=new Node(null,null)

虚拟结点的位置索引可以置为-1

3、链表的删除元素的操作

4、链表的查找元素的操作

5、链表的修改元素的操作

6、一般会用到的:dummyHead 做遍历挂载,一个真正的头结点,一对经常搭配使用,cur遍历,pre前驱

7、还有常见的题目:删除倒数第k个节点,k个或两个有序链表的结合,翻转整个链表

8、一直的困惑解决:创建一个链表时创建的名字不要动,比如创建的是node,之后使得cc=node,这时候cc相当于是node的一个指针,更改他会更改后续的内容,不要直接在创建名上改√

9、遇到链表问题先考虑当前链表为空以及链表的下一个结点是空的情况

10、考虑用递归的方式解决问题,效率更高

原文地址:https://www.cnblogs.com/lin-kid/p/11474563.html

时间: 2024-11-08 23:54:08

对链表的简单复习和理解的相关文章

数据结构和算法--链表一之单向链表的简单实现

链表在我们java中也是一种基础的数据结构,可以理解成是一种和数组同级的数组结构,正如我们所知,在我们使用这集合ArrayList和LinkedList的时候,总会学习底层数组实现的ArrayList和双向链表实现的LinkedList的区别.在这里,我们将要讲说的是单向链表的简单实现,让我们体会一下链表在实现增删改查的时候是怎么样的一个操作,在和前边涉及到的数组的增删改查进行对比,得到我们学习的结论,数组的增删效率低于链表结构,查改效率高于链表结构! 什么叫做单向链表,我们可以理解为一个一个节

数据结构概述<3>链表的简单应用

今天介绍两个链表的简单应用. 1.约瑟夫问题 假设有N个人决定选出一个领导人,方法如下:所有人排成一个圆圈,按顺序数数,每次数到第M个人出局,此时,他两边的人靠拢重新形成圆圈.问题是找出哪一个人将会是最后剩下的那个人.下列程序依次读入N和M,并给出最终结果. #include <stdlib.h> #include <stdio.h> typedef struct node* link; struct node { int item; link next; }; int main(

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

Linux 内核 链表 的简单模拟(2)

接上一篇Linux 内核 链表 的简单模拟(1) 第五章:Linux内核链表的遍历 /** * list_for_each - iterate over a list * @pos: the &struct list_head to use as a loop cursor. * @head: the head for your list. */ #define list_for_each(pos, head) for (pos = (head)->next; pos != (head);

简单粗暴地理解js原型链--js面向对象编程

简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧,想点与代码无关的事,比如人.妖以及人妖. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能生出一堆人宝宝.妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗

循环双链表的简单实现

<span style="font-size:18px;"><strong>//代码为自己编写,可能有问题,欢迎大家留言指正!</strong></span> <span style="font-size:18px;"><strong> </strong></span> #include <iostream> #include <string> u

复习 深入理解Java面向对象程序设计1

复习 深入理解Java面向对象程序设计 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类生成对象(Object).对象又叫做实例(Instance). 类由两大部分构成:属性及方法.属性一般用名词来表示,方法一般用动词来表示. 如果一个Java源文件定义了多个类,那么这些类中最多只有一个类是public的,换句话说,定义的多个类可以都不是public的. 在Java中进行方法的参数传递时,无论传递的是原生数据类型还是引用类型,参数传递方式统一是传值(pass by

链表的简单实现

1 #include <cstdio> 2 #include <cassert> 3 4 typedef struct node { 5 int data; 6 node * next; 7 }Node, *pNode; 8 9 pNode CreateList() { 10 pNode head, p1, p2; 11 p1 = new Node; 12 printf("Please input data: \n"); 13 scanf("%d&qu

c# 单链表实现 简单示例(可复制直接运行)

最近学习数据结构,发现c# 其实和c 的链表的实现差不多的 下面是一段可直接运行的代码 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Threading; 5 6 namespace SingleLinkedList 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 13 //实例调用