C语言:【单链表】查找单链表的中间节点,要求只能遍历一次

原创 2016年05月30日 17:16:18
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

typedef int DataType;

typedef struct SListNode
{
    DataType data;
    struct SListNode* next;
}SListNode;

SListNode* BuyNode(DataType x)
{
    SListNode* next = (SListNode*)malloc(sizeof(SListNode));
    next->data = x;
    next->next = NULL;
    return next;
}

void PushBack(SListNode* & ppHead, DataType x)
{
    if (ppHead == NULL)
    {
        ppHead = BuyNode(x);
    }
    else
    {
        SListNode* tail = ppHead;
        while (tail->next != NULL)
        {
            tail = tail->next;
        }
        tail->next = BuyNode(x);
    }
}
//查找单链表的中间节点,要求只能遍历一次
SListNode* FindMiddle(SListNode* ppHead)
{
    SListNode* slow = ppHead;
    SListNode* fast = ppHead;
    while (fast)
    {
        fast = fast->next;
        if (fast != NULL)
        {
            slow = slow->next;
            fast = fast->next;
        }
        else
        {
            return slow;
        }
    }
    return slow;
}
void PrintSNodeList(SListNode* ppHead)
{
    while (ppHead)
    {
        printf("%d->", ppHead->data);
        ppHead = ppHead->next;
    }
    printf("\n");
}

void Test3()
{
    SListNode* List = NULL;
    PushBack(List, 1);
    PushBack(List, 2);
    PushBack(List, 3);
    PushBack(List, 4);
    PushBack(List, 5);
    PrintSNodeList(List);
    SListNode *ret=FindMiddle(List);
    printf("%d ", ret->data);
}

int main()
{
    Test3();
    system("pause");
    return 0;
}


有关单链表的两个问题【遍历一次求中间节点,倒数第K个结点】

package com.zhiru; /* * 一个无附加头结点的单向链表示例 */ public class LinkedList { private Node head; private...

编写程序,要求通过一次遍历找到单链表中倒数第 n 个节点

单链表的建立和遍历,比较适合才开始学数据结构的人

查找单链表的中间节点

  • 2011年05月17日 16:44
  • 2KB
  • 下载

查找单链表的倒数第k个节点,要求只能遍历一次链表

为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因此我们需要打开我们的思路。既然不能从尾结点开始遍历这个链表,我...

C语言实现单链表创建和遍历

创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。 创建的过程: 1.定义节点的数据结构 c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如: //定义链表中...

C语言实现单链表的初始化、创建、遍历等操作

编译环境:VC++6.0 #include#includetypedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;LinkL...
  • ckangle
  • ckangle
  • 2013年07月29日 10:22
  • 7005

C语言进阶-第18讲:单链表的遍历、创建、插入和删除结点

待写

单链表的创建,表长,插入,查找,逆置,中间元素,删除节点,打印

直接上代码。。。 #include #include using namespace std; struct Node { int data; Node *next; }; /*  type...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
举报原因:
原因补充:

(最多只允许输入30个字)