![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
文章平均质量分 69
Yang Special
你若盛开,蝴蝶自来。
展开
-
如何判断两个链表是否相交并求出相交点
排除链表存在环的情况此情况的意思就是普通的单链表是否相交问题。 相交是什么意思?注意不是单纯的节点的数值域相等,相交的意思是两个链表的部门节点的是同一个,就是这些节点为这两个链表共有。 链表的定义参照:http://blog.csdn.net/dawn_after_dark/article/details/73610674方法一我们根据上图可以发现,链表相交之后,后面的部分节点全部共用,所以原创 2017-06-28 22:21:08 · 12398 阅读 · 3 评论 -
剑指Offer-17-反转链表
题目输入一个链表,反转链表后,输出新链表的表头。解析预备知识链表之类的题目,一般都会涉及到指针的指向问题,对于这类问题,我们可以通过画图来找思路,空想总是比不过烂笔头。注意链表的三种情况,做到万无一失。 1. 输入的链表头指针是null 2. 输入的链表只有一个结点 3. 输入的链表有多个结点思路一我们先画图看看如何反转链表。 通过以上分析我们发现,...原创 2018-06-21 20:07:47 · 1277 阅读 · 2 评论 -
如何判断单链表是否有环、环的入口、环的长度和总长
问题描述1.如何判断单链表是否有环? 2.如果有环,求出环的入口 3.求环长 4.求总长注意这里长度:节点的数量 链表定义参考:http://blog.csdn.net/dawn_after_dark/article/details/73610674探讨要想判断有环,我们可以联系实际生活中的例子,很容易就想到操场上跑圈,因为是环形,所以快的肯定会追上慢的,所以我们可以应用到链表上,用一个快指原创 2017-06-26 17:32:13 · 5110 阅读 · 10 评论 -
单链表冒泡排序与数组冒泡排序
冒泡排序冒泡排序是最基本也是最简单的一种排序,但是复杂度高不适合大数据的排序, 但是对于我们学习排序还是很有帮助的。冒泡排序的思想就是每遍历一次就选出最大值或最小值,类似水中的水泡一样,越到水面泡越大。 下面的链表基于这种定义:http://blog.csdn.net/dawn_after_dark/article/details/73610674形式一冒泡排序其实有好几种变形,原始的思想就是每一原创 2017-06-25 17:15:30 · 1751 阅读 · 1 评论 -
单链表反序(反转)C++实现
问题描述就是给一个链表,求出反转后的链表,比如1 2 3 4 5反转后为5 4 3 2 1. 链表的基础定义及实现参考博文:http://blog.csdn.net/dawn_after_dark/article/details/73610674 下面的解决方法都是基于此类进行解决的。解决方法方法一:利用三个指针思路,利用三个指针(pre,mid,after),原始状态为head->pre->m原创 2017-06-23 14:53:56 · 7596 阅读 · 1 评论 -
单链表中求中间节点
问题描述求单链表中间节点的值,如果中间有2个,只要第一个,就是偶数情况下,只要中间的第一个。速度要快! 解决方法可以参照这篇博文:http://blog.csdn.net/dawn_after_dark/article/details/73611115 这篇博文所说的第一种方法这里就不阐述了。着重说一下第二种。 这里还是用小明和小王跑步的例子,小明与小王一起跑步,小王的速度是小明的2倍,当小王原创 2017-06-22 22:31:08 · 1387 阅读 · 0 评论 -
单链表中求倒数第几个节点
问题描述在单链表中求出倒数第K个节点,要求快速。方法一:利用链表的长度(不推荐)此方法必须事先知道链表的长度,在有长度的信息链表中,此方法可行。 比如我之前的链表是这样的实现,参考博文:http://blog.csdn.net/dawn_after_dark/article/details/73610674此链表含有头节点,头节点含有长度信息,所以我们可以充分运用长度信息。先让指针指向第一个节点,原创 2017-06-22 21:08:31 · 1673 阅读 · 0 评论 -
单链表的基本操作(C++实现)
什么是链表链表属于线性表的一种,所有的数据按线性顺序排列。还有一种线性表是数组,这种数据结构各有各的优点,数组可以随机访问,并且可以根据下标在O(1)的时间内访问数据,而链表不可以随机访问,链表的顺序是由各个对象里的指针决定的。数组在内存中是顺序存储,所以会占一大部分连续的存储空间,而链表可以分散存储,之间的联系靠指针指向就可以,方便使用内存的零碎的空间。在增删方面,数组也是不理想的,每次增删都要移原创 2017-06-22 20:05:19 · 10721 阅读 · 2 评论 -
双向链表的实现
简介双向链表是单链表的升级版,在双向链表中可以在O(1)的时间内访问到节点的前驱,这在单链表中需要重新开始遍历,双向链表无疑让链表的插入和删除操作更加简便,仅使用一个已知的指针就可以完成操作。但是每个节点需要消耗额外的指针空间来存放节点的前驱信息,典型的空间换时间的例子。 不带头结点的双向链表链表定义(head.h):#include <iostream>using namespace std;原创 2017-06-30 13:24:44 · 1141 阅读 · 0 评论 -
剑指Offer-16-链表中倒数第k个结点及其相关变形题目
题目输入一个链表,输出该链表中倒数第k个结点。为了不引起歧义,我们规定最后一个节点为倒数第1个结点。解析预备知识最简单想法肯定就是链表遍历了,分为2次遍历,第一遍历统计出链表的所有节点数,那么倒数第k个结点位于n - k + 1位置处(注意此处说的位置从1开始计数),那么我们第二次遍历则从头结点开始,走n - k步即可到达倒数第k个结点。 由于思路很简单,此处代码省略,感...原创 2018-06-20 11:41:54 · 229 阅读 · 0 评论