24. 两两交换链表中的节点 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2: 输入:l1 = [], l2 = []输出:[]示例 3: 输入:l1 = [], l2 = [0]输出:[0] 提示: 两个链表
链表 递归 迭代 我现在认为迭代是每一步处理一个问题,形成一个比原来规模小但是处理方法相同的子问题,直至处理完。 看了下发现链表和树里的迭代 都用while做结束条件 整体放在一个大循环体内 一步一步处理 我下面列的这个方法应该也是迭代 自己做的就常规想法:直接取下来头,依次前
牛客网高频算法题系列-BM5-合并k个已排序的链表 题目描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 原题目见:BM5 合并k个已排序的链表 解法一:分治法 分治法,可以将大问题分解成小问题,然后继续分解成最小的子问题并解决之。 具体处理过程如下,将k个链表分解
19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2: 输入:head = [1], n = 1输出:[]示例 3: 输入:head = [1,2], n = 1输出:[1] 提示: 链表中结点的数目为 sz1 <= sz <= 300 <=
牛客网高频算法题系列-BM4-合并两个排序的链表 题目描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围: 0 <= n <= 1000,-1000 <= 节点值 <= 1000 要求:空间复杂度 O(1),时间复杂度 O(n) 原题目见:BM4 合并两个排序的链表 解
描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。例如:给出的链表为 1→2→3→4→5→NULL, m=2,n=4,返回 1→4→3→2→5→NULL. 数据范围: 链表长度 0<size≤1000,0<m≤n≤size,链表中每个节点的值满足 |val| <= 1000要求:时间复
描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 0≤n≤1000 要求:空间复杂度 O(1),时间复杂度 O(n) 。 如当输入链表{1,2,3}时, 经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。 以上转
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 设len(A) = m, len(B) = n; A与B共同的部分len = s; m1 = m - s; n1 = n - s; 本题的关键是如何 处理 一般情况下: m1 != n1 方法一: 方案: 求和 鉴于 (m1 + s) + n1 = m + n1 = m1 + ( s + n1) = m1 + n 于是,以headA为出发点
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { th
import java.util.List; /** * The type 判断链表是否有环 快慢指针. */ public class 判断链表是否有环_快慢指针 { /** * The type List node. */ public static class ListNode{ /** * The Data. */ public int data;
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 插入排序思想,把序列分成两部分,有序部分和待排序部分,初始时有序部分就1个元素,对于链表来说就是头结点。遍历链表把待排序部分的结点逐个插入到有序部分。 2、代码实现 package Q0199.Q0147InsertionSortList; import DataStru
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 题目要求时间复杂度为 O(nlongn),使用归并排序。 Step 1: 使用快慢针找中点,由中点把链表分成前后两部分。 Step 2: 分别对前后两部分递归调用归并排序。 Step 3: 对排序后的前后两部分进行合并。 2、代码实现 package Q0199.Q01
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 Step 1: 找中点,把链表断成前后2部分 Step 2: 后半部分reverse Step 3: 同步遍历,把后半部分结点插入到前半部分 2、代码实现 package Q0199.Q0143ReorderList; import DataStructure.ListNode; public class Solution { /
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 用set 保存结点元素,若结点已存在则有环,遍历结束无重复则表示无环。 2、代码实现 package Q0199.Q0141LinkedListCycle; import DataStructure.ListNode; import java.util.HashSet; import java.util.Set; public class Sol
1. 链表和链表节点的实现 listNode结构: 链接 list 结构:
LeetCode 142.Linked List Cycle II (环形链表 II) 题目 链接 https://leetcode.cn/problems/linked-list-cycle-ii/submissions/ 问题描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next
链表操作的递归思维 递归反转整个链表 public ListNode reverseList(ListNode head) { if(head == null || head.next == null){ return head; } ListNode last = reverseList(head.next); head.next.next = head; head.next
单链表的六大解题套路 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(-1),p = dummy;//虚拟头结点 L
23. 合并K个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得
Given the head of a singly linked list, return true if it is a palindrome. Example 1: Input: head = [1,2,2,1] Output: true Example 2: Input: head = [1,2] Output: false Constraints: The number of nodes in the list is in the range [1, 105]. 0 <= Node.va
Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: Input: head = [1,2,3,4,5] Output: [5,4,3,2,1] Example 2: Input: head = [1,2] Output: [2,1] Example 3: Input: head = [] Output: [] Constraints: The number o
Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null. For example, the following two linked lists begin to intersect at node c1: The
//注意这个ListNode类需要写在solution外面,要不然main里没法使用。而且main中类的新建要用 //自己写的: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 //第一种思路的时候出错了 直接用l.next和l.next.next导致都混乱了 以后链
class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { if(list1 == null){ return list2; } if(list2 == null){ return list1; } ListNode res = list1.val < list2.