今天开更每日OJ栏目,主要是总结OJ题中的思路技巧,希望可以养成一种习惯,也希望也可以帮助到大家。
那么第一个题——取自力扣“反转链表”。
这一题有很多思路,我觉得也可以加深对链表本质的理解。
思路1 新空间法
这种思路我的理解是:适用于那种要对链表进行改变重组的题。
即相对于题目给的链表,我们可以新开辟一些空间(链表),然后将原链表中的节点按题目要求复制迁移到新链表中。
针对于这题我们可以新开辟一个链表,将原链表中的第一个节点取下做新链表的头,然后遍历原链表,将节点一个一个头插到新链表中,然后返回新链表的地址。
思路2 三指针法
思路1的方法我觉得比较普适,但这里我们可以发现题目对于新链表的要求比较特殊,那就是新链表的节点相对位置不变,只要求“反转”。
注意这个反转,反转意味着方向,而单链表中决定方向性的就是那个指向下一个节点的next指针,不难想到如果我们将链表的指针反转,即将指向反转问题就迎刃而解了,因此我们可以设计三个指针 n1、n2、n3,让n1指向NULL,n2指向原链表的第一的节点,n2指向原链表的第二个节点 ,遍历原链表进行下述操作,当 n2为空时循环停止,返回n1的值即可。当然要注意n3为空指针的情况。
这题并不是很难,但当时我初学链表时做这题时还是让我对链表的理解更深了,即链表是通过一个指针连接而成,而就是这个指针决定头尾和方向,以后学习过程中遇到与指向有关的问题时就可以试试这种思路,如果大家还有其他方法,欢迎评论区分享。