快速找到未知长度的单链表的中间节点
普通方法就是遍历两次,第一次遍历得到链表长度,第二次遍历得到中间值。时间复杂度为1.5n。(这里需要强调1.5)
快速链表方法就是利用两个指针,慢指针每次移动一个数据,快指针每次移动两个数据。最外层的循环用快指针。当快指针遍历完后,内层慢指针刚好循环到一半。时间复杂度为0.5n。代码如下:
class GetMidVaule(LinkList L, elmType *e){
LinkList k,m;
k=m=L;
for(int i=0;k.next!=null;i++){
k=k.next.next;
m=m.next;
}
*e=m.data;
}