back k node in linklist
今天偶然看到09CS考研题,DS的最后一题,之前肯定是做过的,但是今天看到又忘记了,面试问到估计后悔死了。。。
求链表倒数第k个结点,k>=1, 这种题时属于另一类,并不会渐进意义上降低时间复杂度,但是可以减少比较次数,其实当数据量打上去之后,也会有明显的提升。
我还是想到最朴素的遍历一遍求长度,然后在便利到l-k+1个。
后来看到答案,设置两个指针,一开始就间隔k一直移后指针到尾,直接返回前一指针就可以啦。我愣是没想起来。
相比之前的算法,我感觉指针移动的次数是一样的,只是不需要记录链表长度这样一个变量而已啦,都是移动l+l-k次指针吧,但是舆论还是觉得后面的算法要好,感觉高端点么。。。所谓的逼格高。。。
于是总结链表经典题目的解法好像很多都是用多个指针,我当时都没想到多用几个指针,然后要么是快慢指针(每次移动的速度恒定,且不一样),要么是interval 指针,始终保持
k的距离,感觉这几种思路都是这样,还有逆置链表是三个指针,prev,p, pnext这三个。