今天看了一道题:寻找单链表的中间元素。偶想了一个只用一遍扫描的方法。描述如下:
假设mid指向当前已经扫描的子链表的中间元素,cur指向当前以扫描链表的尾节点,那么继续扫描即移动cur到cur->next,这时只需判断一下应不应移动mid到mid->next就行了。所以一遍扫描就能找到中间位置,伪代码如下
假设mid指向当前已经扫描的子链表的中间元素,cur指向当前以扫描链表的尾节点,那么继续扫描即移动cur到cur->next,这时只需判断一下应不应移动mid到mid->next就行了。所以一遍扫描就能找到中间位置,伪代码如下
cur
=
mid
=
head;
i = j = 0 ;
while (cur != null ){
if ( i % 2 > j){
j ++ ;
mid = mid -> next;
}
i ++ ;
cur = cur -> next
}
i = j = 0 ;
while (cur != null ){
if ( i % 2 > j){
j ++ ;
mid = mid -> next;
}
i ++ ;
cur = cur -> next
}