面试题三 C/C++面试秘笈 查找单链表的中间元素 --程序员面试题
2016-02-25 15:36
363 查看
/**
*面试题 8
*查找单链表的中间元素
*这里使用一个只扫描一遍的方法,假设mid指向当前已经扫面的当前的中间元素,cur指向当前链表已扫描的末节点,
*那么继续扫面即移动cur到cur->next,这时只需判断一下应不应该移动mid到mid->next就行了。
*所以一遍扫面就能找到中间位置
*/
node * search_middle(node * head)
{
int i=0,j=0;
node *current=NULL,*middle=NULL;
current = middle = head->next;//开始都在第一个节点
while (current !=NULL) {
if(( i /2) > j){//如果当前的位置除2大于j的位置,那么才移动mid到下一个节点
j++;
middle = middle->next;//指向下一个节点
}
i++;//每次i都自加一次
current = current->next;//下一个节点
}
return middle;
}
//主函数
int main(int argc,const
char * argv[]) {
node *head =create();//创建单链表
node *current;
cout<<"search middle the node:"<<endl;
current = search_middle(head);
cout<<current->data<<endl;
return 0;
}
如果有任何问题,欢迎下方留言谈论,或者加入QQ群83459374交流
*面试题 8
*查找单链表的中间元素
*这里使用一个只扫描一遍的方法,假设mid指向当前已经扫面的当前的中间元素,cur指向当前链表已扫描的末节点,
*那么继续扫面即移动cur到cur->next,这时只需判断一下应不应该移动mid到mid->next就行了。
*所以一遍扫面就能找到中间位置
*/
node * search_middle(node * head)
{
int i=0,j=0;
node *current=NULL,*middle=NULL;
current = middle = head->next;//开始都在第一个节点
while (current !=NULL) {
if(( i /2) > j){//如果当前的位置除2大于j的位置,那么才移动mid到下一个节点
j++;
middle = middle->next;//指向下一个节点
}
i++;//每次i都自加一次
current = current->next;//下一个节点
}
return middle;
}
//主函数
int main(int argc,const
char * argv[]) {
node *head =create();//创建单链表
node *current;
cout<<"search middle the node:"<<endl;
current = search_middle(head);
cout<<current->data<<endl;
return 0;
}
如果有任何问题,欢迎下方留言谈论,或者加入QQ群83459374交流
相关文章推荐
- c语言入门之项目4.3——利用for循环求1-1/2*2+1/2*2*2...-1/2*2*2*2到2的8次方
- winodws平台C++共享内存实现
- C++基础知识易错点总结(2)
- C语言知识整理(二)
- [C++]智能指针
- 面试题二 C/C++面试秘笈 之单链表逆转/反转
- AVL树的插入删除操作
- 本科教育忽略的黄金C++<5> 泛型算法-特定容器算法
- 字符串匹配
- c语言入门之项目4.1——利用for循环求1!+2!+3!...12!
- [C++11]_[初级]_[左值引用声明和右值引用声明]
- [C++11]_[初级]_[左值引用声明和右值引用声明]
- 公共字符串计算
- 【c++】必须在类初始化列表中初始化的几种情况
- C/C++内存存储
- 字符串加密解密
- 逐梦C++之七:const限定符
- 程序设计第三次作业--C++计算器初始部分
- C/C++中二维数组和指针关系分析
- C语言之模块化例子(编译环境CODEBLOCK,多文件编译)