标签:sp 问题 bs nbsp 如何 编程 指针 第一个 链表
首先,判断一个链表是否有环?
对于这个问题:可以用两个指针,刚开始都指向头节点,然后一个指针每次向后移一步,另一个指针每次向后移两步,如果最后移两步的指针为空时,说明无环,如果最后两个指针相等,说明有环。如果把第一指针看成静止,则相当于第二个每次走一步,所以在那个环上时,是一定能相遇的。
如何找到这个链表环的入口?
当这两个指针相遇后,把第一个指针移向头,两个指针每次都只移一步,再次相等时,就是环的入口。证明:设环上相遇位置为距离环入口处P,入口处前有M个节点,,环肾功能有N个节点,从入口处开始计时,则P1走了(M+P-M)%N,因为计时点为入口处,因为P2每次移两步,所以P2走了(2*(M+P)-M)%N,因为相遇,所以两指针位置一样,(M+P-M)%N=(2*(M+P)-M)%N,得X%N=(M+2*P)%N, 所以(M+P)%N=0。所以,当第一指针移M时,第二个指针也移M,此时,第二个指针在(M+P),因为(M+P)%N=0,所以第二个指针在入口处。
如何找到一个链表中倒数第K个节点?
可以设两个指针指向头节点,然后第二个先后移K步,然后两个同时移,第二个到最后,第一个指针的位置即为所求。
判断两个链表是否相交?
可以用两个指针,分别指向两个链表的头,都把它们移向表尾,如果最后这两个指针相等,则说明这两个链表相交。
标签:sp 问题 bs nbsp 如何 编程 指针 第一个 链表
原文地址:http://www.cnblogs.com/wen-ge/p/4159220.html