两种情况:

1. 链表有奇数个结点, 中间元素只有一个;

2. 链表有偶数个结点, 中间元素会有两个;

#include "stdafx.h"
#include <iostream>
using namespace std;

struct Link
{
    int Data;
    Link *Next;
};

void PrintMiddleNode(Link *head);

int _tmain(int argc, _TCHAR* argv[])
{
    struct Link head, node1,node2,node3,node4,node5;
    head.Data = -1;
    head.Next = &node1;
    node1.Data = 1;
    node1.Next = &node2;
    node2.Data = 2;
    node2.Next = &node3;
    node3.Data = 3;
    node3.Next = &node4;
    node4.Data = 4;
    node4.Next = &node5;
    node5.Data = 5;
    node5.Next = NULL;

PrintMiddleNode(&head);
    cout << endl;

cin.get();
    return 0;
}

void PrintMiddleNode(Link *head)
{
    if(head == NULL || head->Next == NULL) return;
    Link *singleStepPointer = head;
    Link*doubleStepPointer = head;

while(true)
    {
        if(doubleStepPointer->Next != NULL)
        {
            doubleStepPointer = doubleStepPointer->Next;
            if(doubleStepPointer->Next != NULL)
            {
                doubleStepPointer = doubleStepPointer->Next;
            }
            else//奇数个
            {
                //middle node should be singleStepPointer->Next
                cout << "Middle node is: " << singleStepPointer->Next->Data;
                break;
            }
        }
        else//偶数个
        {
            //middle nodes should be current singleStepPointer and singleStepPointer->Next
            cout << "Middle nodes are: " << singleStepPointer->Data << " and " << singleStepPointer->Next->Data;
            break;
        }

singleStepPointer = singleStepPointer->Next;
    }
}

转载于:https://www.cnblogs.com/KevinPan/archive/2012/04/18/2455724.html

[小算法] 找出单链表中的中间元素相关推荐

  1. 如何找出单链表中倒数第K个元素

    第一种方法 为了找出单链表的倒数第K个元素,需要知道这个单链表的长度是多少,就是需要遍历一遍这个单链表,长度为n,倒数第k个,就是单链表的第(n-k)个元素 public Node findLastK ...

  2. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

  3. 算法:删除链表中重复的元素||

    //删除链表中重复的元素方法1:利用哈希表去重,然后遍历哈希表新建节点方法2:双指针 class Solution {public ListNode deleteDuplicates(ListNode ...

  4. go数组去除重复_让我们一起啃算法----删除排序链表中的重复元素

    删除排序链表中的重复元素(Remove-Duplicates-From-Sorted-List) 题干: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1-> ...

  5. 算法-- 删除排序链表中的重复元素(Java)

    题目: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 .返回 已排序的链表 . 示例 1: 输入:head = [1,1,2] 输出:[1,2] 示例 2: 输入: ...

  6. 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。

    今天和大家分享一道2009年代码为408的一道真题: 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 ...

  7. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

  8. C语言随笔小算法:单项链表如何实现队列

    C语言随笔小算法:单项链表如何实现队列 参考链接: https://blog.csdn.net/u012895183/article/details/81914767 代码:

  9. C语言随笔小算法:单向链表

    C语言随笔小算法:单向链表 参考链接: 代码参考:https://blog.csdn.net/go_sann/article/details/80508284 原理参考:https://blog.cs ...

最新文章

  1. 秒懂QPS、TPS、PV、UV、GMV、IP、RPS!
  2. vim 有用命令-20190217
  3. 安卓项目中文件夹的作用
  4. 【做题记录】max-min+1=len 区间计数
  5. 用javascript生成指定范围的随机数
  6. python pyqt5 线程 暂停 重启_PyQt5 线程阻塞?
  7. 关于JVM类加载的几个问题
  8. vector与list的区别
  9. 就业协议中的服务器是什么,关于就业协议,你必须知道的
  10. Linux利用list_head结构实现双向链表
  11. 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
  12. 如何在vim中交换两个打开文件(在拆分中)的位置?
  13. 指标的检测及检测仪器
  14. 案例研究 路由器到路由器EOMPLS---基于端口
  15. 如何在html创建js对象,在js中使用createElement创建HTML对象和元素
  16. 重构之以委托取代继承
  17. 数据挖掘:数据清洗——缺失值处理
  18. c语言 switch错误用法,C语言switch语句的详细用法
  19. 07_第七章 迪克斯特拉算法
  20. TVS (瞬态二极管)

热门文章

  1. python【蓝桥杯vip练习题库】ALGO-195 1的个数
  2. 阿里云域名备案时产品类型
  3. pid控制从入门到精通pdf_【应用指南】PID调节让流量/压力控制又快又稳
  4. 算法与数据结构(2)
  5. 外包网络推广公司探索出高排名网站优化的技巧!
  6. 网站推广专员浅析网站推广期间如何降低网站优化短板威胁?
  7. 网络营销专员浅析如何判断网络营销中网站优化效果几何?
  8. php如何生成html,php生成html文件方法总结
  9. java 编写线程公共类_002-java多线程工具类
  10. 开发日记-20190625 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)