前言
算法的重要性不言而喻!大厂都在考算法,说明算法不好学,区分度高!
如果我们认为我不进大厂我就不用学算法了,我学学框架,学学能用好不就行了。但是你要知道你的竞争者有多少,你怎么才能跟别人拉开差距???不就是需要基础好,能培养吗?
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,补基础。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
很好用的Markdown文档
删除链表的倒数第N个节点
思路
这道题就属于是双指针的经典应用!!!
如果我们需要删除倒数第n个节点的话,我们只需要让快指针移动n步,然后呢让快指针和满指针在同时移动,直到这个快指针指向了末尾了,就说明现在慢指针指的就是要删除的目标值了然后直接删除即可!
自己想的确也想不到可以这样,先记下熟悉思路!
public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(-1); dummy.next = head; ListNode slow = dummy; ListNode fast = dummy; while (n-- > 0) { fast = fast.next; } // 记住 待删除节点slow 的上一节点 ListNode prev = null; while (fast != null) { prev = slow; slow = slow.next; fast = fast.next; } // 上一节点的next指针绕过 待删除节点slow 直接指向slow的下一节点 prev.next = slow.next; return dummy.next; }
整体来说,的确不太好想的到,但是我们可以先记住它的思路
然后多进行练习即可!!!