问题1:找到链表的倒数第n个节点(链表)。
解1:先遍历链表得到链表的长度M,再遍历链表得到第M-n+1个节点。
解2:使用两个指针p1、p2。首先两个指针都指向表头节点。p1先单独进行n次移动,再p1、p2一起移动,直至p1移动到链表尾。
问题2:判定给定的链表是以Null结尾,还是形成一个环(链表)。
解1:借助散列表。1)从表头节点开始,遍历每个节点。2)对于每个节点,检查该节点的地址是否在散列表中。3)如果在,表示当前节点已经访问过了,链表中存在环。4)如果不在,则把该地址插入散列表中。5)重复上述过程,直至到达表尾或找到环。
解2:Floyd环判定算法。使用两个在链表中移动速度不同的指针。一旦它们进入环就会相遇。
问题3:如果链表中存在环,找到环的起始节点。
解:使用两个在链表中移动速度不同的指针pSlow、pFast。一旦它们进入环就会相遇。此时,初始化pSlow的值,使其指向链表的表头节点。然后pSlow、pFast从各自的位置开始沿着链表移动,每次均移动一个节点。它们相遇的位置就是环的开始节点。 解释 !!!!!!!!