list题目
2023-2-17
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 

合并两个有序链表

题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
notion image
 
 

合并 K 个升序链表

题目:给一个链表数组,每个链表都已经按升序排列。请将所有链表合并到一个升序链表中,返回合并后的链表。
示例:
 
 
 

链表中倒数第k个节点

题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点
 
 

删除链表的节点

题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点
示例:
 
 
 

删除链表的倒数第 N 个结点

题目:给一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。
示例:
notion image
 
 
 
 
 
 
 

删除排序链表中的重复元素

题目:给定一个已排序的链表的头head, 删除所有重复的元素,使每个元素只出现一次,返回已排序的链表
示例:
notion image
 
 
 

删除排序链表中的重复元素II

题目:给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字,返回已排序的链表
示例:
notion image
 

两数相加

题目:给两个非空链表,表示两个非负的整数。它们每位数字都是按照 的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。可以假设除了数字0之外,这两个数都不会以0开头。
示例:
notion image
由于输入的两个链表都是逆序存储数字的位数的,因此两个链表中同一位置的数字可以直接相加。如果两个链表的长度不同,则可以认为长度短的链表的后面有若干个 000
同时遍历两个链表,逐位计算它们的和,并与当前位置的进位值相加。如果当前两个链表处相应位置的数字为,进位值为,则它们的和为;其中,答案链表处相应位置的数字为 ,而新的进位值为
 

两数相加 II

题目:给两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
notion image
 
 
 

反转链表

题目:给单链表的头节点head ,请反转链表,并返回反转后的链表
示例:
notion image
notion image
 
 

反转链表II

题目:给单链表的头指针 head和两个整数 left和 right,其中 left <= right。请反转从位置left到位置 right的链表节点,返回反转后的链表
示例:
notion image
notion image
  1. 先将待反转的区域反转
  1. prenext指针指向反转以后的链表头节点,把反转以后的链表的尾节点的next指针指向succ
 

两两交换链表中的节点

题目:给一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点,只能进行节点交换
示例:
notion image
 
 
 
 
 

K 个一组翻转链表

题目:给你链表的头节点head ,每k个节点一组进行翻转,请返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
示例:
notion image
 
 
k个节点放入栈中,之后再弹出k个节点,并将他们依次串联起来,这样就达到了反转k个节点的效果了
notion image
 
 
 
 

奇偶链表

题目:给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。偶数组和奇数组内部的相对顺序应该与输入时保持一致。必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。
示例:
notion image
 
根据节点编号的奇偶性,可以将奇数节点和偶数节点分离成奇数链表和偶数链表,然后将偶数链表连接在奇数链表之后,合并后的链表即为结果链表。
notion image
 
 

旋转链表

题目:给你一个链表的头节点head ,旋转链表,将链表每个节点向右移动k个位置
示例:
notion image
 
 
假设链表的长度为 ,为了将链表每个节点向右移动个位置,只需要将链表的后 k % n个节点移动到链表的最前面,然后将链表的后k % n个节点和前n-k个节点连接到一块即可。
 
 

重排链表

题目:
给定一个单链表 L 的头节点 head ,单链表 L 表示为:
请将其重新排列后变为:
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
notion image
 
 

复制带随机指针的链表

题目:
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 
例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。
返回复制链表的头节点。
用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:
  • val:一个表示 Node.val 的整数。
  • random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。
你的代码  接受原链表的头节点 head 作为传入参数。
示例:
notion image
首先可以忽略 random 指针,然后对原链表的每个节点进行复制,并追加到原节点的后面,而后复制random指针。最后把原链表和复制链表拆分出来,并将原链表复原。
在每个节点的后面加上它的复制,并将原链表和复制链表连在一起。
notion image
从前往后遍历每一个原链表节点,对于有random指针的节点p,让它的p->next->random = p->random->next,这样就完成了对原链表random指针的复刻。
notion image
最后我们把原链表和复制链表拆分出来,并将原链表复原。
notion image
  • 计算机基础
  • 数据结构与算法
  • 链表 list跳跃表 Skip List
    目录