![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
链表
链表
王胖子总叫我减肥
学习使我进步
展开
-
Java数据结构与算法之-----判断两个无环单链表是否交叉
1 问题 单链表相交是指两个链表存在完全重合的部分,如: 在上图中,两个链表相交于与节点5,要求判断两个链表是否相交,如果相交,找出相交的节点。2 问题思路分析 方法一:HashSet 由图可知,如果两个链表相交,那么链表肯定有公共的节点。由于节点的地址或者引用可以看做节点的唯一标识,因此,可以通过判断两个链表中共的节点是否有相同的地址或者引用即可。 1)首先遍历链表1,把遍历到的所有节点的地址存放到hashSet中。 ...原创 2020-07-19 19:48:32 · 157 阅读 · 0 评论 -
Java数据结构与算法之——如何在只给定单链表中某个节点的指针的情况下删除该节点
1.问题 链表1--2--3--4--5--6--7 中指向第五个元素的指针,要求把节点5删除,删除之后链表变为 1--2--3---4--6--72.问题分析 通常,要删除单链表中的一个节点P,首先选用找到节点P的前驱节点pre,然后通过pre.next=p.next来实现对节点P的删除。对于此问题的节点P的前驱节点无法获取到,因此不能使用常用的方法。 1)如果这个节点是链表的最后一个节点,就无法删除该节点。2) 如果不是链表的最后一个节点。 第一:找到...原创 2020-07-19 16:17:02 · 293 阅读 · 0 评论 -
java数据结构与算法之------合并两个有序的链表
1.题目 两个链表 head1 和 head2 各自有序(升序),将他们合成一个链表。要求合成后链表依然有序。2 问题分析 分别用两个指针head1 和 head2 来遍历两个链表,如果当前的head1 指向的数据小于和head 2 指向的数据,则将head1指向的节点归入合并到链表中,否则将head2 指向的节点归并合并到链表中。如果有一个链表遍历结束,则把未结束的链表连接到合并后的链表尾部。 head 1 1-----3-----5----7 h...原创 2020-07-19 13:41:57 · 156 阅读 · 0 评论 -
Java数据结构与算法之------如何把以K个节点为一组的链表进行翻转
1问题 K链表翻转是指把每K个相邻的节点看成一个链表进行翻转。如果剩余的节点不足K,则保持不变,假设给定的链表1---2---3--4--5--6--7 。如果K=2,那么翻转后的链表为 2--1--4--3--6--5--7.如果K为3 ,那么翻转后的链表为 3--2--1--6--5--4--7。2 问题分析 主要思路,以K=3为例 。 链表 head--1---2---3--4--5--6--7 1)先让pre指向链表的头节点,让begin指向链...原创 2020-07-17 23:06:27 · 216 阅读 · 0 评论 -
Java数据结构与算法之-------如何把链表相邻的元素翻转
1.问题 翻转链表相邻的元素,如给定链表1--2--3--4--5--6---7 。翻转后2--1--4--3--6--5--72 问题思路分析 方法一:交换值法 交换相邻两个元素的数据,不需要调整整个链表的结构,比较容易实现。 方法二:就地逆序 通过调整节点指针的指向来直接调换相邻的两个节点。 1)如果单链表正好有偶数个节点,只需要将奇数偶数对调就行、 2)如果链表有奇数个节点,那么只需要将最后一个节点去掉,其他的节点奇偶对调即可。...原创 2020-07-17 21:40:28 · 302 阅读 · 0 评论 -
Java数据结构与算法之------如何检测一个较大的单链表是否有环,找出环入口点
1.问题 单链表有环指的是单链表中某个节点的Next域指向链表中在它之前的某一个节点,这样在链表的尾部形成了一个环形结构,如何判断链表有环?如何找出环的出口。2 问题思路分析: 方法一:蛮力法 定义一个HashSet 来存放节点的引用,并将其初始化为空,从链表的头结点开始遍历,每次遍历到一个节点就判断HashSet中是否存在该节点的引用。如果没有说明这个节点是第一个出现,将其添加到HashSet集合中,如果在HashSet集合找到了相同的节点,那就说明这个节点已经被遍...原创 2020-07-17 21:00:29 · 134 阅读 · 0 评论 -
Java数据结构与算法之———如何将单链表向右旋转
1 问题 链表1-> 2-> 3-> 4-> 5-> 6-> 7 。K=3 那么旋转后链表为5-> 6-> 7-> 1-> 2-> 3-> 42 问题分析 1)首先找到倒数第K+1个节点 slow为尾结点fast.(定义两个快慢指针,先让fast走K步,然后在同时走。) 2)把链表断开成两个子链表,其中后半部分链表节点的个数为K个。 3)让原链表的结尾指向链表的第一个节点 4)让链表的...原创 2020-07-16 21:16:44 · 166 阅读 · 0 评论 -
Java数据结构与算法之-------如何找出单链表的倒数第K个元素
1 问题 找出单链表的倒数第K个元素,例如给定链表 1--2---3--4--5--6---7 ,则单链表的倒数第K=3个元素为5.2 思路分析 方法一: 顺序遍历两遍法 1)首先遍历一遍链表,计算出链表中的节点数n. 2)把倒数第k个数,转成正数第n-k个元素。 3)遍历链表,找到第n-k个元素。方法二:快慢指针法 1)因为单链表只能从头到尾遍历元素,因此可以定义两个快慢指针 2)快指针比慢指针先移...原创 2020-07-16 12:27:04 · 358 阅读 · 0 评论 -
Java数据结构与算法之-------如何多链表进行重新排序
1.问题 给定链表 L0--L1--L2 ----L3 ---...... Ln,把链表重新排序为L0--Ln----L1---Ln-1----L2---Ln-2 。要求: 1) 在原来链表的基础上排序,不能申请新的节点。 2)只能修改节点的next域,不能修改数据域。2 思路分析: 1)首先找到链表的中间节点、 2)对链表的后半部分进行逆序 3)合并:分别从链表中各自取出一个节点,进行合并、3 代码实现package link...原创 2020-07-15 22:34:50 · 154 阅读 · 0 评论 -
Java数据结构与算法之-------如何计算两个单链表的所代表的数之和
1. 问题描述 给定两个链表,链表的每个节点代表一个数,计算两个数的和。例如:输入链表(3--1--5 )和链表(5--9--2)。输出8--0--8,就513+295=808,注意个位数的在链表头。2 思路分析· 对链表中的节点直接进行相加操作,把相加的和存储到新的链表中对应的节点中,同事还要记录节点相加以后产生的进位。注意:1)每组节点相加后需要记录其是否存在进位。 2)如果两个链表的长度不同,当短链表计算完后,只需要考虑长链表的节点值(还有存在的进位)。...原创 2020-07-14 23:38:52 · 187 阅读 · 0 评论 -
Java数据结构与算法之 ----从无序链表中删除重复的项
1.问题 给定一个没有排序的链表,去掉起重复项,并保留原顺序,原链表1---3---1--5---5--7 去掉重复项之后,变为1--3---5---72 思路分析(循序删除) 通过双层循环来实现 1) 外层循环遍历链表 2)内层循环从当前外层循环的节点的后一个节点开始循环 3)内层循环需要定义一个前驱辅助指针,和当前节点4)当内层循环发现与外层当前节点相同的数据时, 前驱节点的后继指针 指向 当前节点的后继指针,(删除当前节点),当前...原创 2020-07-14 21:23:53 · 387 阅读 · 0 评论 -
Java数据结构与算法-------链表反转(如何实现链表的逆序)
1. 问题: 链表head -->1-->2-->3-->4-->5-->6-->7, 如何反转为head -->7-->6->5-->4-->3-->2-->1,2.思路(使用插入法) 思路:从链表的第二个节点开始,把遍历到的节点插入到头结点的后面,直到遍历结束。 假设原链表:head -->1-->2-->3-->4-->5-->6-->7,...原创 2020-07-14 15:53:47 · 167 阅读 · 0 评论 -
java数据结构单向环形链表之算法(约瑟夫问题)
1.单向环形链表的结构 2. 约瑟夫问题 3.约瑟夫问题构建环形链表思路分析: 构建一个单向的环形链表思路 1. 先创建第一个节点,让first 指向该节点,并且形成环。 2. 之后我们没创建一个新的节点,就把该节点,加入到已有的环形链表中、 遍历环形链表。 1. 先定义一个辅助指针,指向first节点。 2....原创 2020-06-02 17:27:41 · 280 阅读 · 0 评论 -
java数据结构双向链表之算法增删改查
1.双向链表应用实例 使用带头的双向链表实现----水浒英雄排行榜。 实现增删改查操作! package Linkedlist.DoublelinkedList;public class DoubleLinkedListDemo { public static void main(String[] args) { //测试。创建节点 HeroNode2 heroNode1=new HeroNode2(1,"宋江"); ...原创 2020-06-02 16:14:37 · 218 阅读 · 0 评论 -
java 数据结构单向链表算法常见面试题(一)
1. 求取单链表中有效节点的个数: // 获取单向链表中,有效节点的个数,如果是带头节点的链表,不需要统计头节点 public static int getlength(Lnode head){ if(head.next==null){ //空链表 return 0; } int length=0; //因为链表的头节点不能动,因此需要一个辅助的变量(指针)tmp. .原创 2020-05-31 20:39:16 · 215 阅读 · 0 评论 -
java 数据结构单链表之算法
1. 链表的介绍 链表时有序的列表,但是它在内存中的存储如下: 1. 链表是以节点的方式来储存的,是链式存储。 2 . 每个节点包括 data域、 next域:指向下一个节点。 3 . 链表的每个节点不一定是连续存储的,如上图所示。 4 链表分为带头节点的链表 和不带头节点的链表。 带头节点的单链表的逻辑结构示意图如下: ...原创 2020-05-31 16:16:03 · 253 阅读 · 0 评论