论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
寻找链表中间节点算法

[科技论文网] http://www.scipapers.com    2007-12-01  

    寻找链表中间节点算法

    链表(特别是单链表)的定位是链表这种数据结构的一个软肋所在,定位某一个元素你

    就不得不通过遍历的方式获得。如果要寻找一个单链表的中间节点,普通的方法就是先遍历得到链表的长度,然后再通过长度遍历得到链表的中间节点。当然有一些链表通过一个特殊的头节点记录链表的长度的情况,可能要简单一些。

           前一段时间,在看链表的归并排序的时候,就不得不面临着寻找链表中间节点的问题。这里给出一种实现,很可能是大家想不到的:):

    1)  使用两个指针进行遍历,快指针每次步进2,慢指针每次步进1;

    2)  当快指针到达链表尾部的时候,慢指针指向的就是链表的中点。

    这个算法的思想和经典问题“判定链表中是否存在环”的思想是一致的,但是如果不是

    有启发,真的是很难想出来:)。

    实现源码为:

    //main.cpp

    #include <ctime>
    #include <iostream>
    using namespace std;

    struct node
    {
           node* _next;
           int _data;
           node(int data):_next(NULL),_data(data)
           {

           }

    };


    node* InitData(int NUM)
    {
           node* head = new node(-1);
           node* tmp = head;

           for (int i = 0; i < NUM; ++i)
           {
                  head = head->_next = new node(i);
           }

           return tmp;
    }


    void Print(const node* head)
    {

           while (head != NULL)
           {
                  cout<<head->_data<<" ";
                  head = head->_next;
           }
           cout<<endl;

    }

     

    node* find_mid_element(node* head)
    {

           if (NULL == head) return NULL;
           if (head->_next == NULL) return head;
           if (head->_next->_next == NULL) return head;
           node* mid= head;

           node* p = mid->_next;
           while ((NULL != p) && (NULL != p->_next))
           {

                  mid = mid->_next;
                  p = p->_next->_next;
           }

           return mid;
    }

     

    int main(int argc,char* argv[])
    {

           node* h = InitData(1000);
           Print(h);

           node* m = find_mid_element(h);     

           if (m != NULL)
                  cout<<m->_data<<endl;
           return 0;

    }

        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
寻找链表中间节点算法
下面没有链接了     算术表达式的计算
最新论文
·[程序设计]寻找链表中间节点算法
·[程序设计]算术表达式的计算
·[程序设计] 数独◎终结者
·[程序设计]使用指针P\Q使链表反转
·[程序设计]格雷码算法
·[程序设计]大数阶乘源码
·[程序设计]随机算法研究
·[程序设计]拷贝链表的O(n)算法
·[程序设计]Prim算法完整实现代码
·[程序设计]矩阵旋转算法的实现
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com