`
steven-zhou
  • 浏览: 207876 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

一个单链表,不知道长度,写一个函数快速找到中间节点的位置

阅读更多
/* 假定这个链表只有奇数个节点 */
List *list_middle(List *l)
{
    List *fast;
    List *slow;

    fast = slow = l;

    while (fast != NULL) {
        if (fast->next)
            fast = fast->next->next;
        else
            return slow;
        slow = slow->next;
    }
    return slow;
}
分享到:
评论
7 楼 elmar 2009-10-27  
恩,我一开始想差了
6 楼 DraculaW 2009-10-26  
elmar 写道
hurricane1026 写道
steven-zhou 写道
/* 假定这个链表只有奇数个节点 */
List *list_middle(List *l)
{
    List *fast;
    List *slow;

    fast = slow = l;

    while (fast != NULL) {
        if (fast->next)
            fast = fast->next->next;
        else
            return slow;
        slow = slow->next;
    }
    return slow;
}

代码太不严谨了。
如果链表有环,你就写了一个死循环。

这也是没办法的事情啊


难道不可以判断一下两个指针什么时候相等么?
5 楼 elmar 2009-10-26  
hurricane1026 写道
steven-zhou 写道
/* 假定这个链表只有奇数个节点 */
List *list_middle(List *l)
{
    List *fast;
    List *slow;

    fast = slow = l;

    while (fast != NULL) {
        if (fast->next)
            fast = fast->next->next;
        else
            return slow;
        slow = slow->next;
    }
    return slow;
}

代码太不严谨了。
如果链表有环,你就写了一个死循环。

这也是没办法的事情啊
4 楼 wantdrink 2009-08-18  
就是拿两根一样的均匀的绳子,一根对折烧,一根就这样烧,对折的烧完了另一根正好烧到一半。
3 楼 myy 2008-12-16  
fast每次跳2步探路,slow每次走1步
2 楼 hurricane1026 2008-12-16  
steven-zhou 写道
/* 假定这个链表只有奇数个节点 */
List *list_middle(List *l)
{
    List *fast;
    List *slow;

    fast = slow = l;

    while (fast != NULL) {
        if (fast->next)
            fast = fast->next->next;
        else
            return slow;
        slow = slow->next;
    }
    return slow;
}

代码太不严谨了。
如果链表有环,你就写了一个死循环。
1 楼 blankyao 2008-12-16  
没看懂...

相关推荐

    链表的19个基本操作

    8.从单链表中查找具有给定值x的第一个元素,若查找成功则返回该结点data域的存储地址,否则返回NULL 9.把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0 10.向单链表的表头插入一个元素 11.向...

    c语言 单链表的各个功能

    完成单链表的建立、查找、求长度、插入、删除、输出,清空,销毁等函数的功能

    单链表C程序示例

    这是一个在VC++6.0环境下写的关于单链表的C语言程序,包括单链表的创建,长度计算,打印,增加节点,删除节点等子函数。 适合初学者。

    数据结构与算法.xmind

    找到想要插入位置的上一个节点 将原本由上一个节点的指向交由插入的节点来指向 上一个节点指针域指向想要插入的节点 获取链表的长度 每访问一次节点,变量++操作即可 删除给定位置的...

    C#实现单链表(线性表)完整实例

    本文实例讲述了C#实现单链表(线性表)...所以,在下面的例子中,执行Purge(清洗重复元素)的时候,没有使用Add()方法去添加元素,而是定义一个节点,让它始终指向目标单链表的最后一个节点,这样就不用每次都从头到尾

    C语言通用范例开发金典.part2.rar

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    C语言通用范例开发金典.part1.rar

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    C 开发金典

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    数据结构算法实现(严蔚敏版配套实现程序)

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历...

    数据结构 严蔚敏 代码

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历...

    数据结构(王)c元代码

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历...

    数据结构算法实现(严蔚敏版配套实现程序)

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 中序遍历二叉树(顺序结构) 169 范例1-62 中序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 中序遍历...

    C++ 课程作业 群体类和群体数据的组织 (链表类的设计)

    首先是题目 **【问题描述】** 请设计一个链表类,实现链表的初始化、插入、删除和打印操作。 节点的定义如下: ...//返回单链表长度。如果是单链表为空,则返回-1 private: LList *head; int len; }; ```

    c++程序链表类设计.cpp

    //返回单链表长度。如果是单链表为空,则返回-1 private: LList *head; int len; }; main函数: int main(int argc, char* argv[]) { linkedList L1; int n; int val; //初始化链表 if(!L1....

    链表实验报告1.doc

    { //函数功能:遍历链表,输出每个节点的elem值 参数:链表(linklist L) 通过循环逐个输出节点的elem值 } 6、 求单链表的长度 int LinkedListLength(LinkedList L) { //函数功能:返回链表的长度 参数:链表(linklist L...

    数据结构第5次作业.docx

    一、查找 1. 算法设计题 :已知n元顺序表a0, a1, … , an-1按关键字...提示:对于C语言32bit宽的unsigned类型,可以采用16进制形式来实现基数排序,即32bit共有8个16进制位,每个16进制位进行一趟分配和收集,共8趟。

    Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】

    本文实例讲述了Python数据结构与算法之链表定义与用法。分享给大家供大家参考,具体如下:...(3)从单链表到单链表的一众变体: 带尾节点的单链表 循环单链表 双链表 1. 链表节点的定义 class LNode: def __init__(s

    数据结构实验(3).doc

    问题描述] 实现带头结点的单链表的建立、求长度,取元素、... //定义一个头节点 L=s;s->next=NULL; return 0; } int doing(LinkList Q); //预定义选择函数 int length(LinkList L); int readin(LinkList &L) //读入数

    软件工程之专题九:数据结构知识

    线性链表的特点是:每个链表都有一个头指针,整个链表的存取必须从头指针开始,头指针指向第一个数据元素的位置,最后的节点指针为空。当链表为空时,头指针为空值;链表非空时,头指针指向第一个节点。 链式存储的...

    数据结构(C++)有关练习题

    内容及步骤: 1、 在前一个实验的基础上,继续增加搜索函数Search(int Info)(如果找到结点,返回指向该结点的指针,如果没有,则返回空指针)和删除函数bool Delete(int Info),如果找到结点,则删除该结点,并...

Global site tag (gtag.js) - Google Analytics