数据结构-链表
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
leetcode-061-旋转链表
然后再向后移动到null,得到rightTail。然后rigthtail.next指向head,leftTail.next指向null即可。先获取链表的长度,然后从头部移动length-k-1次,得到head,leftTail,rightHead,解法1(成功,0ms,极快)原创 2023-07-02 21:49:51 · 533 阅读 · 0 评论 -
leetcode-025-k个一组翻转链表
特殊情况,当翻转部分长度不足 k 时,在定位 end 完成后,end==null,已经到达末尾,说明题目已完成,直接返回即可。初始需要两个变量 pre 和 end,pre 代表待翻转链表的前驱,end 代表待翻转链表的末尾。翻转链表,然后将三部分链表连接起来,然后重置 pre 和 end 指针,然后进入下一次循环。经过k此循环,end 到达末尾,记录待翻转链表的后继 next = end.next。需记录翻转链表前驱和后继,方便翻转完成后把已翻转部分和未翻转部分连接起来。解法1(成功,0ms,极快)原创 2023-05-05 22:58:18 · 71 阅读 · 0 评论 -
leetcode-024-两两交换链表中的节点
用 head 表示原始链表的头节点,新的链表的第二个节点,用 newHead 表示新的链表的头节点,原始链表的第二个节点,则原始链表中的其余节点的头节点是 newHead.next。如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。两两交换链表中的节点之后,新的链表的头节点是 dummyHead.next,返回新的链表的头节点即可。将链表根据节点的位置分成链表1和链表2,原来的变成12121,然后再合并,2121。原创 2023-05-02 01:43:30 · 662 阅读 · 0 评论 -
剑指offer-45-圆圈中最后剩下的数字-java
题目及测试package sword045;/* 题目:0,1,...,n-1 这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。测试样例:输入: 0,1 , 2, 3, 4输出: 3*/import java.util.List;public class main { public static void main(String[] args) { int [] testTable = {5,10,15}; i原创 2021-01-11 21:35:27 · 153 阅读 · 0 评论 -
剑指offer-37-两个链表的第一个公共节点-java
题目及测试原创 2020-12-31 20:38:39 · 155 阅读 · 0 评论 -
剑指offer-26-复杂链表的复制-java
题目及测试package sword026;/* 题目:输入一个复杂链表(每个节点中有节点值,以及两个指针, * 一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。 * (注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空*/public class main { public static void main(String[] args) { Node a=new Node(); Node b=new No原创 2020-12-05 11:17:48 · 205 阅读 · 0 评论 -
剑指offer-17-合并两个排序的链表-java
题目及测试package sword017;/*问题描述: 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。*/public class main { public static void main(String[] args) { LinkList a=new LinkList(1); a.addLast(2); a.addLast(5); LinkList b=new LinkList(-5); b.addLast(原创 2020-11-19 20:50:16 · 116 阅读 · 0 评论 -
剑指offer-16-反转链表-java
题目及测试package sword016;/* 问题描述:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。*/public class main { public static void main(String[] args) { LinkList a=new LinkList(1); a.addLast(2); a.addLast(3); a.addLast(4); a.addLast(5); a.printList(); t原创 2020-11-19 20:49:50 · 127 阅读 · 0 评论 -
剑指offer-15-链表中倒数第K个结点-java
题目及测试package sword015;/* 问题描述:输入一个链表,输出该链表中倒数第K个结点。 * 为了符合大多数人的习惯,从1开始计数,即链表的尾结点是倒数第一个结点。 * 例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6. * 这个链表的倒数第三个结点是值为4的结点。*/public class main { public static void main(String[] args) { LinkList a=new Lin原创 2020-11-13 21:01:14 · 113 阅读 · 0 评论 -
剑指offer-13-O(1)时间删除链表结点-java
题目及测试package sword013;/*问题描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。*/public class main { public static void main(String[] args) { LinkList a=new LinkList(1); a.addLast(2); a.addLast(5); a.printList(); test(a.first,a.first.next.n原创 2020-11-11 21:16:55 · 142 阅读 · 0 评论 -
剑指offer-5-从尾到头打印链表-java
题目及测试package sword005;/**题目描述:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. * */public class main{ /** * @param args */ public static void main(String[] args) { //输入的链表有多个结点 Solution plr=new Solution(); LinkNode node1=new原创 2020-10-29 10:16:04 · 124 阅读 · 0 评论 -
leetcode-142-环形链表 II-java
题目及测试package pid142;/* 142. 环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。https://leetcode-cn.com/problems/linked-list-cycle-ii/示例 1:输入:head = [3,2,0,-4]原创 2020-08-05 15:54:03 · 220 阅读 · 0 评论 -
leetcode-146-LRU缓存机制-java
题目及测试package pid146;/* LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除原创 2020-06-28 14:13:02 · 222 阅读 · 0 评论 -
leetcode-138-复制带随机指针的链表-java
题目及测试package pid138;/* 复制带随机指针的链表给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。 示例:输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$re...原创 2019-12-05 14:01:23 · 222 阅读 · 0 评论 -
leetcode-148-排序链表-java
题目及测试package pid148;/* 链表排序在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5...原创 2019-12-04 14:36:51 · 210 阅读 · 0 评论 -
leetcode-23-合并K个排序链表-java
题目及测试package pid023;/* 合并K个元素的有序链表合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6*/public class...原创 2019-12-03 11:31:27 · 169 阅读 · 0 评论 -
leetcode-链表总结
leetcode-237-删除链表中的节点(delete node in a linkedlist)-java 单向链表中,如果给定链表中的一个节点,不给这个之前的,想要影响之前的,只能把自己改变。 比如要删掉自己,只能把自己变成下一个...原创 2018-08-27 11:32:29 · 438 阅读 · 1 评论 -
leetcode-19-删除链表的倒数第N个节点(remove nth node from end of list)-java
题目及用例及linklistpackage pid019;public class LinkList { public class ListNode { public int val; public ListNode next; ListNode(int x) { val = x; next=null; ...原创 2018-08-28 10:21:11 · 181 阅读 · 0 评论 -
leetcode-234-回文链表(palindrome linked list)-java
题目及案例package pid234;/*回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?*/import pid234.LinkList;import pid23...原创 2018-08-31 14:56:02 · 404 阅读 · 0 评论 -
leetcode-206-反转链表(reverse linked list)-java
题目及用例package pid206;/*反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?*/import pid206.LinkList;i原创 2018-08-29 15:55:24 · 468 阅读 · 0 评论 -
leetcode-21-合并两个有序链表(merge two sorted lists)-java
题目及用例package pid021;/*合并两个有序链表将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4*/import pid021.LinkList;import pid0.原创 2018-08-30 10:24:18 · 194 阅读 · 0 评论 -
leetcode-141-环形链表(linked list cycle)-java
题目及用例package pid141;/*环形链表给定一个链表,判断链表中是否有环。进阶:你能否不使用额外空间解决此题?*/import pid141.LinkList;import pid141.LinkList.ListNode;public class main { public static void main(String[] args...原创 2018-09-03 10:39:44 · 261 阅读 · 0 评论 -
java 单向链表类
package datastructure.linklist;public class LinkList { public class ListNode { public int val; public ListNode next; ListNode(int x) { val = x; next=null; } p...原创 2018-09-18 13:51:45 · 2580 阅读 · 0 评论 -
leetcode-2-两数相加(add two numbers)-java
题目及测试package pid002;/*两数相加给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:3...原创 2018-11-09 13:26:39 · 288 阅读 · 0 评论 -
leetcode-160- 相交链表(intersection of two linked list)-java
题目及测试package pid160;/* 相交链表编写一个程序,找到两个单链表相交的起始节点。 例如,下面的两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → ...原创 2018-11-13 11:32:48 · 274 阅读 · 0 评论 -
leetcode-328-奇偶链表(odd even linkedlist)-java
题目及测试package pid328;/* 奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->...原创 2018-11-12 13:29:32 · 285 阅读 · 0 评论 -
跳表(跳跃表,skipList)总结-java版
目录为什么要有跳表搜索:从链表到跳表跳表简介跳表的实现节点类跳表的结构搜索插入删除打印整个跳表测试跳表整个java代码跳表复杂度时间空间高度为什么要有跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或...原创 2019-05-05 17:29:57 · 955 阅读 · 0 评论 -
leetcode-237-删除链表中的节点(delete node in a linkedlist)-java
题目及用例package pid237;/*请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表...原创 2018-08-27 11:27:26 · 434 阅读 · 0 评论