数据结构与算法
文章平均质量分 54
记录数据结构与算法的学习笔记
神奇的王德发
dddd
展开
-
合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]输入:l1 = [], l2 = []输出:[]输入:l1 = [], l2 = [0]输出:[0]个人代码:/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2021-04-25 11:26:04 · 181 阅读 · 0 评论 -
移除链表元素
题目删除链表中等于给定值val的所有节点如:输入:1—>2—>6—>3—>4—>5—>6,val=6输出:1—>2—>3—>4—>5解答方法:只需要判断节点的值是否等于给定的值,是的话将该节点的上一节点的next指针指向下一个节点!假如删除的是头节点,那将会变得麻烦,所以可以使用哨兵节点来解决该问题!哨兵节点:哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等,它们是纯功能的,通常不保存任何数据,其主要目的是使链表标准化,原创 2021-02-18 21:10:16 · 46 阅读 · 0 评论 -
反转链表
问题将一个链表反转过来,如:输入:1—>2—>3—>4—>5—>null输出:5—>4—>3—>2—>1—>null解法方法一:栈实现原理:利用栈先进后出的原则,将链表遍历的同时一个一个的放进栈中,并将栈中的节点一个一个读出来,组成新的链表顺序!复杂度分析:时间复杂度:O(2L),其中L为链表的长度空间复杂度:O(L),L为链表的长度,主要用于栈的开销实现代码:class Solution { public Li原创 2021-02-18 18:13:32 · 170 阅读 · 0 评论 -
删除链表的倒数第N个节点
题目:解法:方法一:暴力求解– 时间复杂度:找到链表长度O(n)删除从列表开头数起的第(L-n+1)个节点:O(n)整体复杂度O(2n)~O(n)–空间复杂度:O(1)因为只用到单位的内存空间;方法二:快慢指针法(找到特定位置)– 关键字:倒数第N个– 模式识别:涉及链表的特殊位置,考虑快慢指针要删除链表节点,找到它的前驱– 复杂度分析:时间复杂度O(n)空间复杂度O(1)实现原理:直接设置first指针第一个指针指向头节点,创建一个dummy指针并指向头节点原创 2021-02-16 18:09:35 · 132 阅读 · 0 评论 -
Leetcode—相交链表双指针解法
题目查找两个单链表相交的起始节点输入:相交节点的值、两个单链表listA和listB以及各自相交节点的索引值(每个单链表的第一个节点的索引值为0);输出:两个单链表相交节点的值,如果两个节点不相交则返回null;注意事项:如果两个链表没有交点,返回null;在返回结果后,两个链表仍须保持原有的结构;假定整个链表结构中没有循环;程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存;解法思路: 使用一个节点指针node1通过对链表A的遍历,遍历完成后再将node1指针重新指向原创 2021-02-15 11:27:16 · 213 阅读 · 0 评论 -
单向环形列表之Josephu(约瑟夫)问题
单向环形列表之Josephu(约瑟夫)问题Josephu(约瑟夫、约瑟夫环)问题:由一群编号为1,2,3...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从一开始报数,报到数字m的人出列,然后由下一个人从1开始报数,继续报到数字m的人出列,直到出完最后一个人为止,由此产生一个出队编号队列。分析假定n=5、k=1、m=2简单示意图 构建一个单向环形链表的简单思路创建第一个节点,让first指向该节点,并形成环形(只有一个节点的话,便让它自己指向自己);之后每当原创 2021-02-02 17:14:38 · 100 阅读 · 0 评论