Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

readme.md

Algorithm

数据结构和算法练习

70.爬楼梯

典型的递归问题,解决递归问题的关键

  • 1.找到递归的公式
  • 2.找出递归的退出条件,防止内存溢出

针对此题,爬楼梯要么是1步,要么是2步,所以递归公式为f(n-1)+f(n-2),当只有一个台阶时,有一种走法, 当有两种台阶时,有两种走法,所以退出条件为f(1)=1和f(2)=2

解题思路:

  • 开辟新的临时数组tmp,
  • 分别为原有两个数组的最后一个index设置指针i和j,
  • 如果A[i]<B[j],那么就把A[j]放到tmp,反之,则把A[i]放到tmp,这叫做双指针解法

发现刷题重在思路,这道题首先要确定“链表相交”的概念,链表A和链表B相交与D,那么从D往后的链表都是相同的, 因为他们共用的next指针,假定两个指针分别指向两个链表的头结点,链表A指针从头走到尾,然后再从链表B头开始走,相同的速度, 相同的路径,所以两个链表会相遇

首先在刷题前要明白什么是链表

链表是一种天然的动态数据结构,何谓动态,就是可以增加数据,对比数组,数组是静态的,当然此处说的并不是数组的包装函数ArrayList

如何理解指针

链表是由n个节点组成的,而节点中包含数据元素和指针,指针指的就是数据元素存放在内存中的地址,那如何将某个数存到该内存上呢? 通过

a.next = b

表明将a指针指向b,意思是将b放到了叫做a的内存地址上,而

b = a.next

意思是指将a的内存地址等于b 再看反转链表这道题,引入两个指针pre和cur,pre是新添加指针,作为头结点的前继节点,cur作为当前节点,然后不断遍历当前节点,并将 cur指针指向后继节点,原cur节点作为pre,一直遍历到cur为空

我咋没想到用递归呢?通过题解中的图就能明白如何解了

递归公式

比较两个链表的头结点,如果a小于b,则将a指向剩下的部分,同时a链表后移一位

终止条件

如果a为空,则证明a被遍历完全,则返回b

发现链表的题差不多都一个套路

  • 创建空的节点作为哨兵或者哑结点指向头结点
  • 用两个指针移动 此题就是这样,指针a先移动,当距指针b n个单位时,同时后移,当a为空时,就证明b移到了需要删除指针的前一个指针

1.一个指针用来指向head,作为奇链表,一个指针作为偶链表,也指向head, 一个指针用来暂存head,作为偶链表的head,然后分别排奇链表,偶链表 2.奇指针的下下指针指向奇数,偶的下下指向偶数 3.循环跳出条件:指针为空时