LeetCode链表解题模板】的更多相关文章

一.通用方法以及题目分类 0.遍历链表 方法代码如下,head可以为空: ListNode* p = head; while(p!=NULL) p = p->next; 可以在这个代码上进行修改,比如要计算链表的长度: ListNode* p = head; ; while(p!=NULL){ num++; p = p->next; } 如果要找到最后的节点,可以更改while循环中的条件,只不过需要加上head为NULL时的判断 if(!head) return head; ListNode…
一.模板以及题目分类 1.头尾指针向中间逼近 ; ; while (pos1<pos2) { //判断条件 //pos更改条件 if (nums[pos1]<nums[pos2]) pos1++; else pos2--; } 经典的找和的问题都可以从这种思路下手,2数之和,3数之和,还注意要区分是寻找值还是索引(寻找索引则不能排序),是否允许有重复,不允许重复时要怎样避开重复值. 避开重复值的方法,当然,在3sum和4sum中的ij要稍微做修改 && nums[i] == n…
39 40 78. Subsets https://leetcode.com/problems/subsets/description/ void subsets(vector<int>& nums, int pos, vector<int>& current, vector<vector<int>>& result){ if(pos == nums.size()){ result.push_back(current); return…
目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1.题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数.如图: 试题链接:https://leetcode-cn.com/problems/rotate-list/ 2.算法分析: 为了完成该算法,在进行代码编写时先进行了数学分析,下面照片是数学分析的草稿,图可能有…
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Ways 合并两个有序的链表,暴力解法肯定不可取.可以采用下面的这个做法,很通用. # Definition for singly-linked list. # class ListNode…
[剑指Offer]反转链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入一个链表,反转链表后,输出链表的所有元素. Ways 这个题就是[LeetCode]Reverse Linked List 解题报告这个题.思路也一样. 用temp保存pHead的下一个节点.用newHead保存新的节点的开头.然后把pHead.next只想newHead,再移动一下 三个…
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************************* * * 代码摘自郝斌C语言视频的链表部分 * 简单修改为纯C格式 * */ #include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Node { int d…
Permutations Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1]. SOLUTION 1: 经典的递归回溯题目,一次ACCEPT. 请也参考上一个题目LeetCode: Combination…
一.21合并两个有序链表 代码如下: class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: # 首先对特殊情况进行处理,l1 l2 为空的时候 if not (l1 and l2) : # 这个表达式的意思只要l1 l2 不全为真就符合条件 return l1 or l2 elif l1.val > l2.val: # 判断哪一个值比较小,然后保留哪一项 l2.next = self.m…
刷完了LeetCode链表相关的经典题目,总结一下用到的技巧: 技巧 哑节点--哑节点可以将很多特殊case(比如:NULL或者单节点问题)转化为一般case进行统一处理,这样代码实现更加简洁,优雅 两个指针--链表相关的题目一般都需要用到两个指针:prev指针和cur指针 头插法--主要用于reverse链表 前后指针/slow fast指针--用于检测链表是否存在环…
[九度OJ]题目1181:遍历链表 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1181 题目描述: 建立一个升序链表并遍历输出. 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出. 样例输入: 4 3 5 7 9 样例输出: 3 5 7 9 Ways 这个题目感觉可以作弊啊--我直接排序不…
单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 时间限制: 1S类别: DS:线性表->线性表应用 题目描述: 输入范例: -5345646757684654765867987098809853456467576846547658679870988098534564675768465476586798709880985345646757684654765867987098809853456467576846547658679870988098534564675768465…
Leetcode链表 一.闲聊 边学边刷的--慢慢写慢慢更 二.题目 1.移除链表元素 题干: 思路: 删除链表节点,就多了一个判断等值. 由于是单向链表,所以要删除节点时要找到目标节点的上一个节点,如果是双向链表,指向要删除节点本身即可 链表的头节点存在着被删除的风险,所以使用虚拟头节点来方便返回 代码: public class ListNode{ int val; ListNode next; ListNode() {} ListNode(int val) {this.val=val;}…
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189 leetcode 160: https://leetcode.com/problems/intersection-of-two-linked-lists/ 参与人数:3252   时间限制:1秒   空间限制:32768K 本题知识点: 链表 时间空间效率的平衡题…
作者: 负雪明烛 id: fuxuemingzhu 个人公众号:负雪明烛 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode-cn.com/problems/copy-list-with-random-pointer/ 题目描述 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点. 构造这个链表的 深拷贝. 深拷贝应该正好由 n 个 全…
最基础的方式要做到非常熟练,要熟练到不思考就能写,但又需明白各处的要求和陷阱 合并两个有序链表的操作,在前面加上一个初始节点,注意while循环和退出时的处理,理解如何处理其中一个链表遍历完的情况 ListNode* merge(ListNode* l1, ListNode* l2) { //采用前面加一个空闲节点的方式来简化代码 ListNode temp(-); ListNode* result = &temp; while (l1 != NULL && l2 != NULL)…
Rotate List  Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given 1->2->3->4->5->NULL and k = 2, return 4->5->1->2->3->NULL. 思路:题目非常清晰.思路是先得到链表长度.再从头開始直到特定点,開始变换连接就可以. 代码例如以下: /*…
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of the nodes in each of the two partitions. For example, Given 1->4->3->…
Author       :  叨陪鲤 Email         : vip_13031075266@163.com Date          : 2021.01.23 Copyright : 未经同意不得转载!!! Version    : 第一章 二分法 Reference:<LeetCode刷题笔记之模板整理> 目录 1. 二分法 1.1 什么是二分查找 1.2 如何识别二分法 1.3 二分法模板 1.3.1 模板一 1.3.2 Lc69:x的平方根 1.3.3 Lc374:猜数大小…
#include <iostream.h> #include <stdlib.h> //结点模板类 template <typename t1, typename t2> class node{ private: t1 data1; //数据成员data1 t2 data2; //数据成员data2 node<t1,t2> *next; //后继结点指针 public: node(t1 da1, t2 da2):data1(da1),data2(da2),n…
暂时接触到LeetCode上与链表反转相关的题目一共有3道,在这篇博文里面总结一下.首先要讲一下我一开始思考的误区:链表的反转,不是改变节点的位置,而是改变每一个节点next指针的指向. 下面直接看看LeetCode上的题目: 206. Reverse Linked List 这是一道最基本的链表反转题目. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Lis…
上一篇:LeetCode两数之和-Python<一> 题目:https://leetcode-cn.com/problems/add-two-numbers/description/ 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8…
链表测试框架示例: // leetcodeList.cpp : 定义控制台应用程序的入口点.vs2013 测试通过 // #include "stdafx.h" #include <Windows.h> #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr){}; }; v…
Array *532. K-diff Pairs in an Array 方案一:暴力搜索, N平方的时间复杂度,空间复杂度N 数组长度为10000,使用O(N平方)的解法担心TLE,不建议使用,尽管最终验证还是可以过. 方案二:哈希 时间复杂度N 空间复杂度N *1.two sum 思路: 使用hash, 顺序遍历数组,并记录每一个出现过的元素值和其下标,当遍历到当前元素时,查找target-当前元素值 是否出现在map中,存在则返回结果 *16. 3Sum Closest 思路一:暴力 fo…
1. copy-list-with-random-pointer(拷贝一个带随机指针的链表) A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 深拷贝一个链表,链表除了含有next指针外,还包含一个random指针,该指针…
目录 2/445两数相加 综合题(328奇偶链表, 206反转链表, 21合并两个有序链表 ) 92反转链表 II 链表排序(148排序链表, 876链表的中间结点) 142环形链表 II 160相交链表 23合并k个排序链表 61旋转链表, 19删除链表的倒数第N个节点 82/83删除排序链表中的重复元素,203移除链表元素 138复制带随机指针的链表 2/445两数相加 2两数相加(链表倒排结果) 思路: 设置dummy,结果指针p 遍历,只要其中一个没有遍历完就继续: 如果l1不为空,加到…
leetcode 237. 删除链表中的节点 链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/ 示例 : 输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 这道题比较简单,修改之前节点的 next 指针,使其指向之后的节点: /** * Definition for sin…
链表两两元素交换 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. /** * 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. * <b>你不能只是单纯的改变节点内部的值</b>,而是需要实际的进行节点交换. * 解题除了使用递归, 另一种思路就是保证在替换的过程中, 节点不会丢失 * @…
解题方法分类 1. 滑动窗口. 2. 双指针. 3. 快慢指针. 4. 区间合并. 5. 循环排序. 6. 原地反转链表. 7. 树上的BFS. 8. 树上的DFS. 9. 双堆. 10. 子集. 11. 变种二分. 12. 最大前K个元素. 13. K-路归并. 14. 拓扑排序. 1. 滑动窗口. 2. 双指针. 3. 快慢指针. 4. 区间合并. 5. 循环排序. 6. 原地反转链表. 7. 树上的BFS. 8. 树上的DFS. 9. 双堆. 10. 子集. 11. 变种二分. 12. 最…
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.   image.png 解题思路: 使用双指针,快指针与慢指针的间隔为n: 涉及到最后要删除慢指针的节点,为了方便,先开辟一个node为pre,pre的next指向head,快慢指针均从pre开始遍历: 先由快指针向前走n步,再快慢指针同时向前走,直到快指针的next指向空: 那么此时慢指针的next即为要删除的节点,此时令slow.next=slow.next.next即可. Python3代码: # Definition f…