链表
专项练习
斯沃福德
这个作者很懒,什么都没留下…
展开
-
LeetCode143:重排链表
代码】LeetCode143:重排链表。原创 2022-08-04 19:16:43 · 93 阅读 · 0 评论 -
LeetCode 19:删除链表的倒数第 N 个结点
最后fast为末尾节点的next即为null,slow就是要删除的节点node,而pre节点记录了node的前节点!然后让fast和slow同时移动,直到fast指向链表末尾,此时slow就是要删除的节点!如果要删除倒数第n个节点,让fast移动n步,目的是拉开fast和slow之间的距离;而k>1且k1且k=size,即删除第一个,那么直接返回第二个节点即可;如果k=1且size>1,即删除最后一个节点;直接按情况分类计算;......原创 2022-08-03 20:29:40 · 150 阅读 · 0 评论 -
LeetCode 23: 合并K个升序链表
使用最小堆,for-each取出每一个链表的头节点,将val值依次放入堆中;最后从小到大依次取出即可;原创 2022-08-01 20:16:24 · 112 阅读 · 0 评论 -
LeetCode 83:删除排序链表中的重复元素
LeetCode 83原创 2022-06-01 16:46:17 · 121 阅读 · 0 评论 -
剑指offer76:删除链表中重复的结点
剑指offer76题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5方法一:直接比较删除public class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead==null){ r原创 2022-04-27 22:24:02 · 1742 阅读 · 0 评论 -
剑指offer 18:删除链表的节点
剑指offer 18题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点方法一:双指针首先校验,若为head为null则返回null若要删除的是head,则返回head.next双指针遍历链表,找出要删除的节点并删掉若遍历到结尾还没有,则返回nullpubli原创 2022-04-26 22:29:44 · 1671 阅读 · 0 评论 -
剑指offer:两个链表的第一个公共结点
剑指offer:52题目输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n \le 1000n≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)方法一:直接记住结论:使用两个指针遍历两个链表,当指针指到末尾时又从头开始,如果两个链表有公共点,那么两个指针一定会在第一个公共点相遇!实现:public class Solution {原创 2022-04-26 11:47:06 · 1306 阅读 · 0 评论 -
剑指offer 22:链表中倒数最后k个结点
剑指offer 22题目:输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。方法一:暴力将节点全部压进栈中,由于栈是头插头取,后进先出,要找出倒数第k个节点,只需要弹出k-1个数,然后栈顶就是第k个节点了! public ListNode FindKthToTail (ListNode pHead, int k) { // write code here //全放进原创 2022-04-24 22:24:06 · 449 阅读 · 0 评论 -
剑指offer25:合并两个排序的链表
剑指offer25题目要求:给两个非递减单链表l1, l2,合并为一个非递减的单链表。原理视频讲解流程:1.建立一个新的链表mer , mer也是哨兵节点(不存数据),并创建curr节点作为指针,用于存储每次新加入的节点2. 比较list1和list2,将较小的节点添加至新链表,使用curr.next来记录。注:每一轮只能添加一个节点!若一轮在list1和list2先后添加两个节点,则无法保证新链表中的递增排序!3. 跳出循环,将剩余节点添加至新链表4. 返回哨兵节点的next即为新链表的原创 2022-04-22 17:40:14 · 1151 阅读 · 0 评论 -
LeetCode 141题/剑指offer 22题:环形链表
链接:LeeCode 141题目:给你一个链表的头节点 head ,判断链表中是否有环。思路:此题采用快慢指针来做,核心思想就是,设置一快一慢指针,若指针成环,则两个指针一定会相遇!代码:public class Solution { public boolean hasCycle(ListNode head) { ListNode fast=head; ListNode slow=head; while(fast!=null&原创 2022-01-10 16:51:47 · 276 阅读 · 0 评论 -
剑指 Offer 06:从尾到头打印链表
剑指offert 06题目: 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表:,返回一个数组为[3,2,1]思路: 栈的特点是后进先出,即最后压入栈的元素最先弹出。考虑到栈的这一特点,①使用栈将链表元素顺序倒置。②然后再遍历至数组中即可。代码:import java.util.*;public class Solution { ArrayList<Integer> list=new ArrayList&l原创 2022-02-22 23:07:06 · 403 阅读 · 0 评论 -
剑指Offer 22题:链表中环的入口结点
连接:剑指Offer 22题目:给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。方法一:快慢指针分成两步,第一步:先使用快慢指针法判断链表是否成环,若不成环则返回null;成环则进行下一步第二步:若成环,则再建立一个新的慢指针newCur从head出发,slow继续从之前快慢指针重合的位置出发,两个步长为1的指针一定会相遇!相遇的位置就是环的入口!public class Solution原创 2022-01-10 19:42:40 · 157 阅读 · 0 评论 -
剑指Offer 24题:反转链表
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法一:迭代链表的特性是需要指针才能找到下一个元素,如果直接将1的next改为null,则1后面的元素就找不到了,所以需要变量来保存指针。未知链表元素的个数,使用while循环。假设循环的当前变量为curr,从头节点head开始需要有一个指针Next先记录c原创 2022-01-09 21:31:23 · 258 阅读 · 0 评论