2. 两数相加2021-03-31 13:33:58
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -
难度简单205
目录
题目:[剑指 Offer 24. 反转链表](https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/)题目分析
初始解答:学习他人:方法一:方法二:
总结
刷题日期:20:5635 星期二2021年3月30日
个人刷题记录,代码收集,来源皆为leetcode
经过多方讨论和请教,现在打
剑指Offer 252021-03-30 16:31:58
注意,可能存在空链表
使用头节点数值小的作为需返回的链表
将另外一个链表的节点加入需返回的链表
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null) return l2;
if(l2 == null) return l1;
if(l1.val >
LeetCode142 - 环形链表22021-03-29 23:33:55
LeetCode142 - 环形链表(中等)
链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/
给定一个链表,判断链表中是否有环,无环则输出null;有环则输出环的入口点
编码:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNo
数据结构--线性表2021-03-28 21:05:16
线性表:零个或多个数据元素的有序序列
从字面意思上来想,
首先,它是有序的,那么就可以认为,每个元素之间是有序的,如果存在多个元素,那么第一个元素只有它的后继,最后一个元素只有它的前驱,而位于中间的元素,既有一个前驱也有一个后继, 其次,它是序列,那么也就是说,它是有限的,如
leetcode旋转链表2021-03-28 18:31:39
旋转链表
题目思路代码
题目
思路
先求出整个链表的长度,然后将传入的需要链表右移的次数k对长度取余数,得出最少需要我们移动的次数。然后找到链表中倒数第 k 个数的前一个数slow,slow的next为新链表的头结点,最后将slow的next指向nullptr,并将原链表首尾相连。
代码
/**
*
2. 两数相加2021-03-28 13:04:49
2. 两数相加
题目
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例
示例 1:
输入:l1 = [
leetcode——对链表进行插入排序2021-03-28 11:33:58
思路: 1.如果链表为空,则返回其本身; 2.如果链表不为空,初始化排序表最后指针lastsorted为head,当前需排序的指针curr为head->next; 3.为了方便将元素插入到head之前,设立Head_front指针,值设为0,指向head; 4.初始化完成后,对排好序的表利用指针prev进行遍历查找,找到适合插入的位置;
题目描述:给一个链表的头结点 head,旋转链表,将链表每个节点向右移动 k 个位置
示例1:
输入:1->2->3->4->5->NULL, k=2
输出:4->5->1->2->3->NULL
示例2:
输入:1->2->3->NULL, k=5
输出:2->3->1->NULL
解题思路:由于是右移,给的又是头节点,所以得找出旋转后的新链表的尾
2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。
福大大 答案2020-03-27:
1.找尾节点并且计算链表节点个数。2.如果k大于等链表节点个数,需要取模,k一定在[0,节点个数)范围之内。如果k=0,直接返回
2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。
福大大 答案2020-03-27:
1.找尾节点并且计算链表节点个数。2.如果k大于等链表节点个数,需要取模,k一定在[0,节点个数)范围之内。如果k=0,直接返回
2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。
福大大 答案2020-03-27:
1.找尾节点并且计算链表节点个数。
2.如果k大于等链表节点个数,需要取模,k一定在[0,节点个数)范围之内。如果k=0,直接返
Problem
Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
Constraints:
The number of nodes in the list is in the range [0, 300].-100 <= Node.val <= 100The l
力扣——61、旋转链表2021-03-27 19:01:35
这道题整体上就是一个循环链表遍历的问题。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode
旋转链表——fgriver2021-03-27 17:31:13
题目
https://leetcode-cn.com/problems/rotate-list/
题解
NA的原因有几个: 1.这里的head是带有val值的 2.判断是否为空指针时顺序写反了 再讲一下思路: 首先看到数据集中k的范围到了2*10^9,所以我们需要将k进行优化,优化的方法就是k = k mod length 那么我们先求这个链表的长
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例 2:
输入:head = [0,1,2], k = 4
输出:[2,0,1]
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
*
/**
* 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.val = val; this.next = next; }
*
leetcode328奇偶链表2021-03-27 14:01:23
题目
思路 even偶数 odd奇数 代码`
class Solution {
public ListNode oddEvenList(ListNode head) {
if(head==null) return head;//容易被忽略
ListNode odd=head;
ListNode evenHead=odd.next;//偶数链表的头结点
ListNode even=
61. 旋转链表 medium + 使用列队旋转列表
总体思路:
把所有的链表节点放入队列中,右旋k次,其实就是左旋q.size() - k次, 然后创建链表输出 注意:如果右旋超过节点数量,等于仅仅右旋了k%q.size()次,举例:5节点右旋5次,等于没变。 优化点:建议放弃queue和stack,分别使用deque和vector
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,1,2]
输出:[1,2]
示例 2:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210326182059526.png?x-oss-pro
删除链表相关问题整合
一.在O(1)时间删除链表节点题目描述思路分析代码实现
二.剑指offer18.删除链表的节点题目描述思路分析代码实现
三.力扣83.删除链表中的重复元素(留一个,不删光)题目描述思路分析代码实现
四.力扣82.删除链表中的重复元素Ⅱ(删光不留)题目描述思路分析代码
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,1,2] 输出:[1,2]
解题思路
扫描链表,将重复元素删除
代码
/**
* Definition for singly-linked list.
* public c
82. 删除排序链表中的重复元素 II
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, L
剑指 Offer 24. 反转链表2021-03-25 20:01:09
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
思路:
画图进行模拟解决问题。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* Lis
题目82. 删除排序链表中的重复元素 II:
题解:
看错题:删除多余的重复节点
emmm...记住了题目在路上想的,结果记错了,实现了删除多余的重复节点的功能,如下
虽然但是,把代码还是放一下吧
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* List