[小算法] 找出单链表中的中间元素
两种情况:
1. 链表有奇数个结点, 中间元素只有一个;
2. 链表有偶数个结点, 中间元素会有两个;
#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
[小算法] 找出单链表中的中间元素相关推荐
- 如何找出单链表中倒数第K个元素
第一种方法 为了找出单链表的倒数第K个元素,需要知道这个单链表的长度是多少,就是需要遍历一遍这个单链表,长度为n,倒数第k个,就是单链表的第(n-k)个元素 public Node findLastK ...
- 算法---删除排序链表中的重复元素 II
删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...
- 算法:删除链表中重复的元素||
//删除链表中重复的元素方法1:利用哈希表去重,然后遍历哈希表新建节点方法2:双指针 class Solution {public ListNode deleteDuplicates(ListNode ...
- go数组去除重复_让我们一起啃算法----删除排序链表中的重复元素
删除排序链表中的重复元素(Remove-Duplicates-From-Sorted-List) 题干: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1-> ...
- 算法-- 删除排序链表中的重复元素(Java)
题目: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 .返回 已排序的链表 . 示例 1: 输入:head = [1,1,2] 输出:[1,2] 示例 2: 输入: ...
- 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。
今天和大家分享一道2009年代码为408的一道真题: 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 ...
- java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...
转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...
- C语言随笔小算法:单项链表如何实现队列
C语言随笔小算法:单项链表如何实现队列 参考链接: https://blog.csdn.net/u012895183/article/details/81914767 代码:
- C语言随笔小算法:单向链表
C语言随笔小算法:单向链表 参考链接: 代码参考:https://blog.csdn.net/go_sann/article/details/80508284 原理参考:https://blog.cs ...
最新文章
- 秒懂QPS、TPS、PV、UV、GMV、IP、RPS!
- vim 有用命令-20190217
- 安卓项目中文件夹的作用
- 【做题记录】max-min+1=len 区间计数
- 用javascript生成指定范围的随机数
- python pyqt5 线程 暂停 重启_PyQt5 线程阻塞?
- 关于JVM类加载的几个问题
- vector与list的区别
- 就业协议中的服务器是什么,关于就业协议,你必须知道的
- Linux利用list_head结构实现双向链表
- 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
- 如何在vim中交换两个打开文件(在拆分中)的位置?
- 指标的检测及检测仪器
- 案例研究 路由器到路由器EOMPLS---基于端口
- 如何在html创建js对象,在js中使用createElement创建HTML对象和元素
- 重构之以委托取代继承
- 数据挖掘:数据清洗——缺失值处理
- c语言 switch错误用法,C语言switch语句的详细用法
- 07_第七章 迪克斯特拉算法
- TVS (瞬态二极管)
热门文章
- python【蓝桥杯vip练习题库】ALGO-195 1的个数
- 阿里云域名备案时产品类型
- pid控制从入门到精通pdf_【应用指南】PID调节让流量/压力控制又快又稳
- 算法与数据结构(2)
- 外包网络推广公司探索出高排名网站优化的技巧!
- 网站推广专员浅析网站推广期间如何降低网站优化短板威胁?
- 网络营销专员浅析如何判断网络营销中网站优化效果几何?
- php如何生成html,php生成html文件方法总结
- java 编写线程公共类_002-java多线程工具类
- 开发日记-20190625 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)