今天看了一道题:寻找单链表的中间元素。偶想了一个只用一遍扫描的方法。描述如下:
假设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
}