`
steven-zhou
  • 浏览: 215391 次
  • 性别: 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  
没看懂...

相关推荐

    C++ 实现带头节点的单链表

    本篇文章主要介绍如何使用C++来实现一个带有头节点的单链表。单链表是一种基本的数据结构,在计算机科学中有着广泛的应用,例如用于存储有序的数据集合或作为其他更复杂数据结构(如哈希表)的基础组件。 #### 类...

    删除单链表的倒数第n个节点.cpp

    在本文中,我们将深入探讨如何实现C++编程中删除单链表倒数第n个节点的问题,这是一个典型的链表操作,对于理解和掌握数据结构中的链表至关重要。首先,我们需要了解单链表的基本概念,它的存储结构以及如何进行基本...

    单链表指定位置插值

    首先调用`getelem`函数找到第`i-1`个节点(即待插入位置的前一个节点),然后创建新节点并调整链接。 ### 结论 单链表指定位置插值是一项基础但重要的操作,它展示了链表动态性和灵活性的特点。通过上述分析,我们...

    c语言 单链表的各个功能

    单链表是计算机科学中数据结构的基础之一,它是一种线性结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C语言中,我们可以使用结构体来定义链表节点,并通过指针操作实现链表的各种功能。下面...

    javaScript实现一个单链表,找到单链表中的倒数第n个节点.pdf

    在JavaScript中实现一个单链表并找到倒数第n个节点是数据结构和算法问题中的一个常见场景。这里我们将详细探讨如何实现这个功能。 首先,我们需要定义一个`Node`类来表示链表中的每个节点,它包含两个属性:`...

    单链表的操作

    ListLength函数用于获取单链表的长度,该函数的参数是一个指向链表的指针L。该函数遍历链表,统计节点的个数,并将其返回给调用者。 3. 获取表中第i个元素的值 GetElem函数用于获取单链表中第i个元素的值,该函数...

    单链表的快速排序算法

    单链表是一种基础的数据结构,它由一系列节点构成,每个节点包含数据元素和指向下一个节点的指针。在计算机科学中,链表是数组的一种补充,尤其在动态内存分配和处理大容量数据时表现出优越性。快速排序算法,是排序...

    单链表节点分拆形成两个新链表

    这里假设我们将根据节点数据是否大于某个特定阈值来进行分拆,大于阈值的节点放入一个新链表,不大于阈值的节点放入另一个新链表。 ```java public void splitList(int threshold, IntSLList list1, IntSLList list...

    单链表的插入删除 遍历等操作

    单链表是数据结构中的一种基础类型,它是由一系列节点(每个节点包含数据和一个指向下一个节点的指针)组成的一维线性结构。在计算机科学中,理解并掌握单链表的插入、删除和遍历等操作是至关重要的,因为它们构成了...

    数据结构试验之单链表的实现

    1. 插入操作:在单链表中插入新节点通常涉及到找到插入位置的前一个节点,然后将新节点的指针域指向当前节点,同时将前一个节点的指针域更新为新节点的地址。例如,在链表头部插入新节点,只需将新节点设为头节点;...

    简单单链表(数据结构)

    单链表是一种线性数据结构,每个元素(也称为节点)包含两部分:一部分存储实际的数据,另一部分存储指向下一个节点的引用(或称为指针)。链表的首节点通常被称为头节点,而最后一个节点的指针指向null,表示链表的...

    带头结点的单链表

    对于单链表而言,如果在链表的起始位置额外增加一个特殊的节点,称为头结点,则这样的单链表被称为“带头结点的单链表”。 带头结点的单链表能够简化某些基本操作的实现,并使得链表的操作更加统一。例如,在进行...

    设head为单链表的头指针,将单链表中元素按递增顺序就地排列

    在本例中,定义了一个简单的单链表节点结构体 `struct_Node`,其中 `data` 用来存储整型数据,`next` 是一个指向下一个节点的指针。 ```c struct_Node { int data; struct_Node *next; }; ``` #### 二、单链表...

    单链表的插入和删除操作

    单链表是一种线性表,它是一种动态存储结构,由多个节点组成,每个节点都包含一个数据域和一个指针域。单链表的优点是可以动态地添加和删除节点,且插入和删除操作的时间复杂度较低。 单链表的基本操作包括插入、...

    List list单链表

    如果要在链表中间插入,需要找到插入位置的前一个节点,然后更新其指针。 3. **删除操作**: 删除操作需要找到待删除节点的前一个节点,然后更改它的指针以指向待删除节点的下一个节点。如果删除的是头节点,需要...

    C++ 单链表反转 C++ 单链表反转

    单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C++中,我们通常通过定义一个结构体或类来表示链表节点。在这个例子中,我们有一个名为`linkb`的结构体,它有两个成员...

    C++单链表模版(逆置、插入。。。。。。)

    首先找到目标位置的前一个节点,然后将新节点插入到这个前一个节点之后,更新新节点和前一个节点的next指针。 4. **删除操作**:根据给定的值或位置删除链表中的节点。删除操作需要找到待删除节点的前一个节点,...

    C语言单链表的实现

    1. 单链表的定义:在C语言中,单链表由一系列节点构成,每个节点包含两部分信息,一部分是存储数据的域(data),另一部分是指向下一个节点的指针域(next)。定义单链表的结构体代码如下: ```c typedef struct ...

    C语言写函数建立一个有三名学生数据的单项动态链表

    在计算机科学中,链表是一种常见的线性数据结构,它不像数组那样存储在连续的内存空间中,而是由一系列节点组成,每个节点包含数据元素及指向下一个节点的指针。单项动态链表(也称为单向链表)是其中一种类型,每个...

    数据结构单链表实验

    如果是其他位置,则找到该位置前一个节点,将该节点的`next`指针指向被删除节点的下一个节点。 - **插入节点**:`lnode* insert(lnode*& head, int i, elemtype e)`函数在指定位置插入新节点。若插入位置为第一个...

Global site tag (gtag.js) - Google Analytics