链表
从零开始的数据猿
这个作者很懒,什么都没留下…
展开
-
LeetCode24 两两交换链表中的节点
题目 解题思路 画图模拟 (上图是对代码随想录的图进行修改) 代码 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.原创 2022-03-08 07:47:53 · 213 阅读 · 0 评论 -
NC133 链表的奇偶重排
题目 解题思路 两种方法,代码如下 代码 public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ // public ListNode oddEvenList (ListNode head) { // // write code he原创 2021-10-17 18:03:18 · 73 阅读 · 0 评论 -
NC21 链表内指定区间反转
题目 解题思路 代码 public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { ListNode virHead = new ListNode(0); virHead.next = head; ListNode pre = virHead; ListNode p = head; for (int i = 1原创 2021-10-17 17:45:30 · 69 阅读 · 0 评论 -
NC2 重排链表
题目 解题思路 我们都知道链表的缺点是查询效率低,每一次都需要从头开始遍历。所以如果按照题目的要求组成新链表,要去得到最后一个节点,就得从头将链表遍历一次,这样反复操作,直到将原来的链表改变到题目要求的链表。这样很明显是非常耗时间的。、 由于有了上面的分析,直到了这一缺点,我们就可以想到与链表齐名的数组了。 我们知道数组想访问某一个元素的时候,可以通过下标直接去访问它,这不就是我们想要的吗? 所以下面我们先来一个简单粗暴的方法,因为我们知道ArrayList的底层就是用数组实现的,所以我们将链表储存在一个原创 2021-10-17 17:02:06 · 127 阅读 · 0 评论 -
NC132 环形链表的约瑟夫问题
题目 解题思路 代码 import java.util.*; public class Solution { /** * * @param n int整型 * @param m int整型 * @return int整型 */ public int ysf (int n, int m) { // write code here LinkedList<Integer> list=new L原创 2021-10-17 17:00:24 · 64 阅读 · 0 评论 -
NC23 划分链表
题目 解题思路 使用虚拟头结点创建新的符合条件的链表 import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode类 * @param x int整型 * @return ListNode类 */原创 2021-10-17 16:58:12 · 269 阅读 · 0 评论 -
NC96 判断一个链表是否为回文结构
题目 给定一个链表,请判断该链表是否为回文结构。 回文是指该字符串正序逆序完全一致。 示例1 输入: {1} 返回值: true 解题思路 这题是让判断链表是否是回文链表,所谓的回文链表就是以链表中间为中心点两边对称。我们常见的有判断一个字符串是否是回文字符串,这个比较简单,可以使用两个指针,一个最左边一个最右边,两个指针同时往中间靠,判断所指的字符是否相等。 但这题判断的是链表,因为这里是单向链表,只能从前往后访问,不能从后往前访问,所以使用判断字符串的那种方式是行不通的。但我们可以通过找到链表的中间节点原创 2021-10-17 14:42:29 · 155 阅读 · 0 评论 -
NC70 单链表的排序
题目 解题思路 先利用快慢指针找出链表的中点,然后分为两个链表,一直分,知道无法分为止,然后自底而上排序归并 代码 import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode类 the head node * @ret原创 2021-10-17 11:01:07 · 129 阅读 · 0 评论 -
NC51 合并k个已排序的链表
题目 描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围:节点总数 0 \le n \le 50000≤n≤5000,每个节点的val满足 |val| <= 1000∣val∣<=1000 要求:空间复杂度 O(1)O(1)(即额外使用常数大小的空间),时间复杂度 O(nlogn)O(nlogn) 示例1 输入: [{1,2,3},{4,5,6,7}] 返回值: {1,2,3,4,5,6,7} 示例2 输入: [{1,2},{3,4,5},{6}] 返回值:原创 2021-10-17 10:03:17 · 303 阅读 · 0 评论 -
NC40 两个链表生成相加链表
题目 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 给定两个这种链表,请生成代表两个整数相加值的结果链表。 数据范围:0≤n,m≤10000000 \le n,m \le 10000000≤n,m≤1000000,链表任意值 0≤val≤90 \le val \le 9 0≤val≤9 要求:空间复杂度 O(n)O(n)O(n),时间复杂度 O(n)O(n)O(n) 例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1-原创 2021-10-17 09:19:06 · 139 阅读 · 0 评论 -
JZ22 链表中倒数最后k个结点
题目 解题思路 一、暴力求解 public class Solution { public ListNode FindKthToTail (ListNode pHead, int k) { // write code here if(k==0)return null; ListNode p = pHead; int len = 0; while(p!=null){ len++;原创 2021-10-16 16:59:20 · 128 阅读 · 0 评论 -
JZ76 删除链表中重复的结点
题目 解题思路 辅助空间 分析 多次遍历,第一次遍历把重复的结点值存入 set 容器,第二次遍历,当结点值存储在 set 容器中,就删除该结点 代码 import java.util.*; public class Solution { public ListNode deleteDuplication(ListNode pHead){ if(pHead == null){ return null; } // 先原创 2021-10-16 15:29:31 · 178 阅读 · 0 评论 -
复杂链表的复制
题目 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。 下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。 示例: 输入:{1,2,3,4,5,3,5,#,2,#} 输出:{1,2,3,4,5,3,5,#,2,#} 解析:我们将链表分为两原创 2021-10-16 15:33:02 · 78 阅读 · 0 评论